这是我的代码:
multiple select
时,Perk不会保存在multiple true/false
上。 perk save and habtm working。
class Perk < ActiveRecord::Base
has_and_belongs_to_many :companies
end
class Company < ActiveRecord::Base
has_and_belongs_to_many :perks
end
查看 perk / new.html.erb
<%= select_tag "company_id", options_from_collection_for_select(Company.all, 'id', 'name',@perk.companies.map{ |j| j.id }), :multiple => true %>
<%= f.text_field :name %>
控制人员代码:
def new
@perk = Perk.new
respond_with(@perk)
end
def create
@perk = Perk.new(perk_params)
@companies = Company.where(:id => params[:company_id])
@perk << @companies
respond_with(@perk)
end
答案 0 :(得分:0)
听起来您可能没有在控制器的perk_params方法中包含company_id。 Rails四使用强烈的pramas,这意味着你需要说明你允许设置的params。但是如果没有看到更多的代码就很难肯定地说。
在您的控制器中,您应该看到这样的方法(可能有更多选项:name):
def perk_params
params.require(:perk).permit(:name)
end
您应该尝试添加:company_id,使其看起来像这样:
def perk_params
params.require(:perk).permit(:name, :company_id)
end
如果您的方法中有其他参数,请将它们留下并添加:company_id
编辑到原始答案
上述内容仅适用于一对多或一对一,因为您使用的是has_and_belongs_to_many,您需要添加公司:[]到您的参数列表的末尾,如下所示
def perk_params
params.require(:perk).permit(:name, companies: [] )
end
或者像这样
def perk_params
params.require(:perk).permit(:name, companies_ids: [] )
end
有关详细信息,请参阅以下链接:
http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html
http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters
答案 1 :(得分:0)
您的select_tag
应该返回一组company_ids:
<%= select_tag "company_ids[]", options_from_collection_for_select(Company.all, 'id', 'name',@perk.companies.map{ |j| j.id }), :multiple => true %>
然后,在您的控制器中,引用company_ids参数:
@companies = Company.where(:id => params[:company_ids])
(我假设您在创建操作中故意遗漏了@perk.save
调用...否则,也应包含该调用。Model.new
不会存储记录。)< / p>