Rails 3中未定义的方法/ NoMethodError

mar*_*ion 0 ruby-on-rails ruby-on-rails-3

所以我正在做一个lynda.com Rails基本培训教程,我收到一个视频教程没有的错误.我认为这与我正在使用的不同版本的Ruby&Rails(今天最新版本)有关,而不是他们在录制时使用的版本(我认为在2007年).

这就是我的控制器的样子:

class PublicController <ApplicationController

def album_list
    @albums = Album.find_by_sql('SELECT * FROM albums;')
end 

def alt_album_list
    release_date = '2011-10-01'
    artist = 'Paul'
    @albums = Album.find(:all, 
        :conditions => ["release_date <= ? AND artist LIKE ?", release_date, '%' + artist + '%'],
        :order => 'release_date ASC',
        :limit => 1, :offset => 1)
    render(:action => 'album_list')
end

def one_album_list
    release_date = '2011-10-01'
    artist = 'Paul'
    @album = Album.find(:first, 
        :conditions => ["release_date <= ? AND artist LIKE ?", release_date, '%' + artist + '%'],
        :order => 'release_date ASC')               
end
Run Code Online (Sandbox Code Playgroud)

结束

这就是我的观点:

<html>
<head>
<title></title>
</head>

<body>

    Title: <%= @album.title %><br />
    Artist: <%= @album.artist %><br />
    Genre: <%= @album.genre %><br />


</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我加载它时得到的错误是:

NoMethodError in Public#show_album

Showing C:/Users/<username>/music_library/app/views/public/show_album.rhtml where line #8 raised:

undefined method `title' for nil:NilClass
Extracted source (around line #8):

5: 
6: <body>
7: 
8:  Title: <%= @album.title %><br />
9:  Artist: <%= @album.artist %><br />
10:     Genre: <%= @album.genre %><br />
11:     
Rails.root: C:/Users/<username>/music_library

Application Trace | Framework Trace | Full Trace
app/views/public/show_album.rhtml:8:in `_app_views_public_show_album_rhtml___574395264_32579964__949661750'
Run Code Online (Sandbox Code Playgroud)

Mar*_*ran 9

让我先告诉你,如果代码示例,这已经过时了

def album_list
    @albums = Album.find_by_sql('SELECT * FROM albums;')
end
Run Code Online (Sandbox Code Playgroud)

真的在那个视频现在停止观看,因为它会做得更好然后坏.

Ruby on Rails在guides.rubyonrails.com上有一些非常新的和编写良好的文档,我也听说过很多关于http://railstutorial.org/的文章.

现在我也会尝试回答你的问题但由于这段代码几乎没有意义,所以很难.

更改

def album_list
    @albums = Album.find_by_sql('SELECT * FROM albums;')
end  
Run Code Online (Sandbox Code Playgroud)

def index
    @albums = Album.all
end 
Run Code Online (Sandbox Code Playgroud)

将视图移动并重命名为app/views/albums/index.html.erb

并确保你改变

  Title: <%= @album.title %><br />
  Artist: <%= @album.artist %><br />
  Genre: <%= @album.genre %><br />
Run Code Online (Sandbox Code Playgroud)

   <% @albums.each do |album| %>
    Title: <%= album.title %><br />
    Artist: <%= album.artist %><br />
    Genre: <%= album.genre %><br />
  <% end %>
Run Code Online (Sandbox Code Playgroud)

并在您的路线文件中定义路线 resources :albums

我希望这可以帮助您掌握掌握Rails的正确途径.