限制Formtastic收集多对多

时间:2014-02-22 05:02:42

标签: ruby-on-rails-4 has-many-through formtastic

我已经成功地将formtastic集成到我的rails项目中,并用它在多对多关系中进行多值选择。

问题在于我似乎无法找到如何将选择限制在那些相关的选择。

鉴于以下内容:

class Pool < ActiveRecord::Base
 has_many :poolings, dependent: :destroy
 has_many :commercials, :through => :poolings
 accepts_nested_attributes_for :poolings
 accepts_nested_attributes_for :commercials
 belongs_to :client
end

关系多对多模型

class Pooling < ActiveRecord::Base
 belongs_to :pool
 belongs_to :commercial
end

和商业模式

class Commercial < ActiveRecord::Base
 belongs_to :client
 has_many :poolings, dependent: :destroy
 has_many :pool, :through => :poolings
end

以下代码可用于创建多选表单:

<%= semantic_form_for @pool do |f| %>
  <%= f.inputs %>
  <%= f.inputs :commercials %>
  <%= f.actions %>
<% end %>

关键是假设形式化:广告转化为多对多的选择形式。

现在阅读文档,我无法理解要添加到行

的内容
<%= f.inputs :commercials %>

因此,当我在表单中使用它来编辑“client_id = 1”的“池”时,它将仅向我显示“client_id = 1”的“广告”。

使用以下with collection select给出了预期的结果:

<%= f.collection_select :commercials, Commercial.where(:client_id => @pool.client), :id, :name %>

formtastic中的等价物是什么?

顺便说一下,作为RoR的新手,我发现各种各样的组件和宝石似乎做的事情略有不同,这让我很困惑。开源的乐趣!

1 个答案:

答案 0 :(得分:0)

有一个&#34;集合&#34;选择,复选框和无线电的参数(参见Usage)。

对于您的具体问题,解决方案可能如下所示:

<%= semantic_form_for @pool do |f| %>
  <%= f.inputs do %>
    <%= f.input :commercials, :collection => Commercial.where(:client_id => @pool.client) %>
  <% end %>
  <%= f.actions %>
<% end %>