我有两个模型(为清楚起见,代码已编辑):
class App < ActiveRecord::Base
has_and_belongs_to_many :products
end
class Product < ActiveRecord::Base
has_and_belongs_to_many :apps
end
我希望能够向每个应用程序添加多个产品。此外,应用程序中产品的顺序很重要,以及我遇到问题的地方。
我正在使用 simple_form 并尝试使用关联方法:
<%= simple_form_for(@app) do |form| %>
<%= form.input :name %>
<%= form.association :products %>
<%= form.button :submit %>
<% end %>
它工作得很好,但它创建的选择框是不可订购的。我尝试的解决方案是创建多个<select>
盒子并以某种方式订购它们。到目前为止,这行不通。作为测试,我尝试了这个:
<%= form.collection_select('product_ids', Product.all, :id, :name, {}, {name: 'app[product_ids][]'}) %>
<%= form.collection_select('product_ids', Product.all, :id, :name, {}, {name: 'app[product_ids][]'}) %>
<%= form.collection_select('product_ids', Product.all, :id, :name, {}, {name: 'app[product_ids][]'}) %>
<%= form.collection_select('product_ids', Product.all, :id, :name, {}, {name: 'app[product_ids][]'}) %>
它实际上确实在数据库中建立了关联,但它为每个选择标签“选择”了所有产品,最终只选择了所有产品上的最后一个产品:
<select id="app_product_ids" name="app[product_ids][]">
<option selected="selected" value="1">Golf Club</option>
<option value="20">Music Disc</option>
<option selected="selected" value="17">Magic Wand</option>
<option value="15">Nike Running Shoes</option>
<option selected="selected" value="19">Watch</option>
<option selected="selected" value="16">Wooden Spoon</option> // this is what is selected in the browser
</select>
最终,我将添加和删除这些动态。
所以我的问题是,我怎样才能做到这一点?一种方法是让每个<select>
关联到特定产品而不是所有产品。也许有更好的方法。