Rails:编辑表单中的条件嵌套属性

时间:2015-11-30 04:07:28

标签: ruby-on-rails-4 nested-attributes

我有一个名为Offer的模型,另一个名为PurchasinGroup

Offer有很多PurchasingGroups

Offer接受PurchasingGroups

的嵌套属性

创建优惠时,您可以根据需要添加任意数量的采购组。

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

最好的方法是什么?

1 个答案:

答案 0 :(得分:4)

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