我已经成功地将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的新手,我发现各种各样的组件和宝石似乎做的事情略有不同,这让我很困惑。开源的乐趣!
答案 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 %>