Rails has_many :through 和 collection_select 与多个 [英] Rails has_many :through and collection_select with multiple

查看:31
本文介绍了Rails has_many :through 和 collection_select 与多个的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用 has_many 时遇到以下问题:通过 collection_select 的多选中的多对多关系:multiple => true.我有供应商可以交付许多供应商可以交付的许多成分.看看:

I have the following problem using a has_many :through many-to-many relation in a multi-select via collection_select :multiple => true. I have Suppliers who deliver many Ingredients which can be delivered by many Suppliers. Have a look:

成分模型:

class Ingredient < ActiveRecord::Base
  has_many :ingredient_suppliers
  accepts_nested_attributes_for :ingredient_suppliers, :allow_destroy => true

  has_many :suppliers, :through => :ingredient_suppliers
end

供应商模型:

class Supplier < ActiveRecord::Base
  has_many :ingredient_suppliers
  has_many :ingredients, :through => :ingredient_suppliers
end

关系实体:

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

这是表格.请注意,如果不指定 :name:

And this is the form. Note that I could not get it to work without specifying the :name:

<%= form_for(@ingredient) do |f| %>
 <%= f.fields_for :suppliers do |supplier_fields| %>
      <%= supplier_fields.collection_select (:supplier_ids, 
            Supplier.all(:order=>"name ASC"), 
            :id, :name, 
            {:selected => @ingredient.supplier_ids, 
             :include_blank => true}, 
            {:multiple => true, 
              :name => 'ingredient[supplier_ids]'}) %>
  <% end %>
<% end %>

如果我删除:name,则会收到此错误消息:

If I remove the :name, then I get this error message:

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 参数只包含一个供应商 ID,而不是供应商 ID 数组:

The problem now is, that the PUT parameters only contain one supplier_id instead of an array of supplier_ids:

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

推荐答案

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

I've got the problem solved. In this case, using fields_for was the error. The solution is using a collection_select, like this:

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

这篇关于Rails has_many :through 和 collection_select 与多个的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆