【问题标题】:.joins method returning incorrect id's.joins 方法返回不正确的 id
【发布时间】:2013-12-31 18:36:41
【问题描述】:

更新

我有一个简单的 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 号,以便链接正常工作?

【问题讨论】:

  • 你的问题是什么?
  • 你看到请求了吗? :id 实际上是在 params 哈希中发​​送的吗?
  • 是的,在我的 Rails 服务器中,当我点击专辑链接时,我收到了 Parameters: {"id"=&gt;"28"}
  • 每张专辑都会出现这种情况,还是只针对特定专辑?
  • 查看我最近对我的问题的修改

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


【解决方案1】:

Album.find_by_id(params[:id]) 没有匹配时,@album 变为nilNilClass 没有名为 name 的方法。

【讨论】:

  • 我在上面编辑了我的问题,但基本上 @top_ratings 变量返回了正确的专辑列表,但它们的 ID 号错误,这就是为什么 link_to 不起作用,我目前正在正在寻找一种方法来重构变量,以便它返回具有正确 ID 号的专辑。
【解决方案2】:

通过改变上面的代码:

<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 正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2012-08-07
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多