Rails 4 - 找到嵌套属性,选择某个子项

时间:2014-05-14 21:05:56

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

我有一个嵌套模型的对象。我目前正在获取所有嵌套对象:

@no = Parent.find(params[:parent_id]).children

现在,其中一个孩子有一个属性,将其标识为收藏夹。如何从孩子中获得最喜欢的孩子?

此外,如何在视图/更新中使用fields_for仅针对该单个对象编辑属性?

2 个答案:

答案 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