2015-11-30 69 views
1

我有一個模型叫Offer和另一個名爲PurchasinGroup的Rails:在編輯表單條件嵌套屬性

OfferPurchasingGroups

很多PurchasingGroups

Offer接受嵌套屬性在創建你可以添加一個報價儘可能多的採購組。

PurchasingGroup有一個名爲active一個布爾屬性。

在編輯Offer時,您可以看到所有已創建的採購組,但我想讓用戶僅編輯處於活動狀態的採購組,並且不顯示不活動的採購組。

這是我edit行動offers_controller.rb

def edit 
    @offer = Offer.find(params[:id]) 
end 

這是我的形式(只有部分的事項):

<fieldset> 
     <legend>Purchasing groups</legend> 
     <%= f.fields_for :purchasing_groups do |builder| %> 
      <%= render partial: 'purchasing_group_fields', locals: { f: builder } %> 
     <% end %> 
    </fieldset> 

在編輯表單中的所有采購團都被顯示對於編輯,我想只顯示那些活躍我的意思是purchasing_group.active == true

是如何做到這一點的最好方法是什麼?

回答

2
<%= f.fields_for :purchasing_groups, @offer.purchasing_groups.where(active: true) do |builder| %> 
    <%= render partial: 'purchasing_group_fields', locals: { f: builder } %> 
<% end %> 

,另一方面,你也可以在模型中加入協會

class Offer 
    has_many :active_purchasing_groups, class_name: "PurchasinGroup", -> { where(active:true) } 
    ... 
end 

然後

<%= f.fields_for :active_purchasing_groups do |builder| %> 
    <%= render partial: 'purchasing_group_fields', locals: { f: builder } %> 
<% end %> 
+0

精彩!我不知道,你可以通過查詢來' f.fields_for',非常感謝你拯救了我的一天。問候! – SsouLlesS

+0

嗨,添加你告訴我它可以正常工作,但是當表單中有一個錯誤時,重置購買組,我的意思是它不顯示最後輸入的值...這是一個可用性問題... – SsouLlesS

+0

可能你附上控制器代碼? – richfisher