Rails has_many:through和collection_select有多个

我使用has_many有以下问题:通过collection_select在multi-select中通过多对多关系:multiple => true。 我有供应商提供许多成分,可由许多供应商提供。 看一看:

成分模型:

class Ingredient  true has_many :suppliers, :through => :ingredient_suppliers end 

供应商模型:

 class Supplier  :ingredient_suppliers end 

关系实体:

 class IngredientSupplier < ActiveRecord::Base belongs_to :ingredient belongs_to :supplier end 

这就是forms。 请注意,如果没有指定:name,我无法使其工作:

   "name ASC"), :id, :name, {:selected => @ingredient.supplier_ids, :include_blank => true}, {:multiple => true, :name => 'ingredient[supplier_ids]'}) %>   

如果我删除:name,那么我收到此错误消息:

 Supplier(#-617951108) expected, got Array(#-608411888) Request Parameters: {"commit"=>"Anlegen", "authenticity_token"=>"MuEYtngwThharmM1KaAbH8JD3bScXiDwj0ALMytxl7U=", "_method"=>"put", "utf8"=>"✓", "id"=>"1", "ingredient"=>{"name"=>"Ingredient 1", "nr"=>"00100", "unit"=>"kg", "mol_per_unit"=>"2000, 00000", "description"=>"", "suppliers"=>{"supplier_ids"=>["1", "2"]}}} 

现在的问题是,PUT参数只包含一个supplier_id而不是一个supplier_id数组:

 "ingredient"=>{"name"=>"Rohstoff 3", "nr"=>"00300", "unit"=>"Stk.", "mol_per_unit"=>"0,00000", "description"=>"", "supplier_ids"=>"2"} 

我已经解决了问题。 在这种情况下,使用fields_for是错误。 解决方案是使用collection_select,如下所示:

 <%= collection_select(:ingredient, :supplier_ids, Supplier.all(:order=>"name ASC"), :id, :name, {:selected => @ingredient.supplier_ids, :include_blank => true}, {:multiple => true}) %>