使用选择框Rails HABTM订单

时间:2013-11-06 17:20:15

标签: ruby-on-rails ruby-on-rails-4 many-to-many

我有两个模型(为了清晰起见,代码已经过编辑):

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>关联到特定产品而不是所有产品。也许有更好的方式在一起。

0 个答案:

没有答案