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}) %>