Rails: 编辑表单中的条件嵌套属性
Rails: Conditional nested attributes in edit form
我有一个模型叫 Offer
另一个叫 PurchasinGroup
Offer
有很多 PurchasingGroups
Offer
接受 PurchasingGroups
的嵌套属性
创建报价时,您可以根据需要添加任意数量的 PurchasingGroups。
PurchasingGroup
有一个名为 active
.
的布尔属性
在编辑 Offer
时,您可以看到所有已创建的 PurchasingGroups,但是我想让用户只编辑活动的 PurchasingGroups,而不显示非活动的采购组。
这是我在 offers_controller.rb
中的 edit
操作:
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
最好的方法是什么?
<%= 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 %>
我有一个模型叫 Offer
另一个叫 PurchasinGroup
Offer
有很多 PurchasingGroups
Offer
接受 PurchasingGroups
创建报价时,您可以根据需要添加任意数量的 PurchasingGroups。
PurchasingGroup
有一个名为 active
.
在编辑 Offer
时,您可以看到所有已创建的 PurchasingGroups,但是我想让用户只编辑活动的 PurchasingGroups,而不显示非活动的采购组。
这是我在 offers_controller.rb
中的 edit
操作:
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
最好的方法是什么?
<%= 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 %>