Rails 3 - 关联 - 它是如何工作的?

Posted

技术标签:

【中文标题】Rails 3 - 关联 - 它是如何工作的?【英文标题】:Rails 3 - associations - how it work? 【发布时间】:2011-09-07 11:18:30 【问题描述】:

我试图了解关联的行为,但我做错了。

我有这两个模型:

class Album < ActiveRecord::Base
  has_many :photos
end

class Photo < ActiveRecord::Base
  belongs_to :album
end

这意味着一个相册可以有很多张照片,每张照片都属于一个相册。

现在,如果我在视图中有这段代码(假设我在控制器中设置了@album = 106,也就是专辑的 ID 号):

@album.photos.each_with_index do |pic, index|
  ...
end

我得到了错误:ActionView::Template::Error (undefined method 'photos' for 106:Fixnum):

为什么我会收到此错误消息?我以为我必须设置相册的@album 变量ID,然后循环将通过album_id (album_id=106) 搜索表Photos 中的照片。

我做错了什么?

【问题讨论】:

最好使用局部渲染每张照片,因为这样可以分隔视图的“构建块”。 render @album.photos 将为相册中的每张照片渲染一次“photos/_photo.html.erb”视图。 【参考方案1】:

您必须获取模型实例才能获取关联,如下所示:

@album = Album.find(106)

要按创建日期对照片进行排序,请执行以下操作:

@album.photos.order('created_at DESC').each_with_index do |pic, index|
  ...
end

【讨论】:

是的,没错,谢谢。我想问你一个问题 - 现在它可以工作了,我终于从表中获取数据Photos - 可以设置each 循环,从表中选择数据的方法是什么?例如,最低 ID 的隐式方式,但我需要到最新的时间......这可能是这样的说法吗? 我越来越喜欢 RoR!谢谢伯努瓦。

以上是关于Rails 3 - 关联 - 它是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 跨多个模型搜索

如何使用Rails关联访问值

Rails 仅将模型嵌套关联中的某些字段呈现为 json

需要 jquery 如何在 Rails 3 应用程序中工作?

Rails 3 & jQuery - 两者如何协同工作来创建 Web 应用程序?

Rails管理员 - 在“导出”部分中自定义关联的差异值