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 %>