我有一个嵌套模型的对象。我目前正在获取所有嵌套对象:
@no = Parent.find(params[:parent_id]).children
现在,其中一个孩子有一个属性,将其标识为收藏夹。如何从孩子中获得最喜欢的孩子?
此外,如何在视图/更新中使用fields_for
仅针对该单个对象编辑属性?
答案 0 :(得分:5)
我不知道您将该记录标识为收藏夹的属性名称,但我们可以说它是名为boolean
的{{1}}。考虑到这种情况,以下情况应该有效:
is_favorite
要编辑其属性,您可以执行以下操作(您必须在ERB或HAML中进行翻译,具体取决于您的应用使用的内容):
children = Parent.find(params[:parent_id]).children
@favorited_children = children.where(is_favorite: true) # return 0..N records! not only 0..1 !
希望这有帮助!
答案 1 :(得分:1)
您还可以查看使用ActiveRecord Association Extension
这基本上可以通过创建可链接到子关联的实例方法来实现,如下所示:
#app/models/parent.rb
Class Parent < ActiveRecord::Base
has_many :children do
def favorites
where(is_favorite: true) #-> to use MrYoshi's example
end
end
end
这将允许您使用以下内容:
@parent = Parent.find params[:id]
@favorites = @parent.children.favorites