更新
我有一个简单的rails应用程序,主页显示评分最高的专辑,在我的控制器中使用此代码(使用此解决方案中的代码:How to display highest rated albums through a has_many reviews relationship):
def home
@top_ratings = Album.joins(:reviews).select("*, avg(reviews.rating) as average_rating").group("albums.id").order("average_rating DESC")
@top_seven = @top_ratings[0...7]
end
在我的home.html.erb文件中,我正在显示每个相册,并有一个link_to标记,将用户带到相册的显示页面:
<tbody>
<tr>
<% @top_seven.each do |album| %>
<td><%= link_to (image_tag album.picture, size: '150x150'), album_url(album) %> </td>
<% end %>
</tr>
</tbody>
数据显示正常,但是当我点击链接时,我在专辑的显示页面上出现了nil:NilClass的“未定义方法名称”错误。
在我的rails服务器上,我注意到与@top_ratings和@top_seven变量相关联的专辑ID与专辑的实际ID不同,这就是我收到错误的原因。
是否有人知道如何重构@top_ratings以便它会使用正确的 ID号返回评分最高的专辑,以便链接正常工作?
答案 0 :(得分:1)
当Album.find_by_id(params[:id])
不匹配时,@album
变为nil
。 NilClass
没有名为name
的方法。
答案 1 :(得分:0)
通过更改上面的代码:
<td><%= link_to (image_tag album.picture, size: '150x150'), album_url(album) %></td>
对此:
<td><%= link_to (image_tag album.picture, size: '150x150'), album_url(album.album_id) %></td>
它将为相册提取正确的ID并允许link_to正常工作。