2014-05-14 23 views
1

我有和嵌套模型的对象。我目前得到的所有嵌套的对象,像这样:Rails 4 - 找到嵌套的属性,选择某个孩子

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

现在,这些孩子中的一个具有标识作为他们最喜爱的一个属性。我怎样才能从孩子中得到最喜欢的孩子?

另外,如何在视图/更新中仅使用fields_for来编辑属性?

+0

不要忘了接受一个答案像你好像做每一次你问一个问题StackOverflow上的时间... – MrYoshiji

+0

@MrYoshiji钍请您提供答案和评论。你的回答在我的问题的第一部分帮助了我。当我的问题的所有部分都被回答时,我肯定会接受一个解决方案。例如,这个问题还没有得到答案。我仍然需要知道如何更新子对象的属性。 – Jordan

+0

我用第二个问题的代码更新了我的答案 – MrYoshiji

回答

5

我不知道您的属性的名称,该名称将该记录标识为收藏,但我们假设它是名为is_favoriteboolean。考虑到这一点abose,下面应该工作:

children = Parent.find(params[:parent_id]).children 
@favorited_children = children.where(is_favorite: true) # return 0..N records! not only 0..1 ! 

要修改它的属性,你可以如下(你必须把它在ERB或HAML翻译,这取决于你的应用程序使用什么)做:

form_for @favorited_children do |form_builder| 
    form_builder.text_field :name 
    form_builder.check_box :is_favorite 
end 

希望这有助于!

+0

谢谢!正是我需要的 – Jordan

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