.joins方法返回错误的id

时间:2013-12-31 18:36:42

标签: ruby-on-rails sqlite ruby-on-rails-4 rails-activerecord nomethoderror

更新

我有一个简单的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号返回评分最高的专辑,以便链接正常工作?

2 个答案:

答案 0 :(得分:1)

Album.find_by_id(params[:id])不匹配时,@album变为nilNilClass没有名为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正常工作。