2015-04-20 35 views
-1

这里是我的代码:复式选择下拉公司并保存振作和各自公司

帕金斯不节省multiple select,当multiple true/false。 perk保存和habtm工作。

class Perk < ActiveRecord::Base 
has_and_belongs_to_many :companies 
end 
class Company < ActiveRecord::Base 
has_and_belongs_to_many :perks 
end 

视图振作/ 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

如果您的问题更清楚,显示您所做的一些研究,您尝试过的,您得到的错误,您将有更好的机会获得较好的答案等等。一定要阅读[我如何问一个好问题?](http://stackoverflow.com/help/how-to-ask)和[我应该避免问什么类型的问题?](http:///stackoverflow.com/help/dont-ask)。 –

回答

0

这听起来像你可能没有包含在perk_params方法COMPANY_ID你的控制器。 Rails 4使用强大的pramas,这意味着你需要说明你允许设置的参数。但是,如果没有看到更多的代码,很难说。

在你的控制器,你应该看到这样的方法(可能有更多的选择,只是:名):

def perk_params 
    params.require(:perk).permit(:name) 
end 

你应该尝试添加:COMPANY_ID到它,所以它看起来是这样的:

def perk_params 
    params.require(:perk).permit(:name, :company_id) 
end 

如果有其他PARAMS诠释你的方法让他们在,只是说:COMPANY_ID

编辑到原来的答案

以上将只工作一到一对多或一对一之一,因为你正在使用has_and_belongs_to_many你将需要公司补充:[]您PARAMS列表的末尾这样

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

+0

谢谢@mark。我已经允许company_id用于特权参数。但它仍然没有工作。 – Alam

+0

对不起,我刚刚重新阅读您的问题company_id是一对多或一对一的关系。因为你使用的是has_and_belongs_to_many,所以你需要添加公司:[]你在perk_params方法中的params结尾 –

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

http://apidock.com/rails/ActionView/Helpers/FormTagHelper/select_tag#691-sending-an-array-of-multiple-options

然后,在你的控制器,参考company_ids PARAM:

@companies = Company.where(:id => params[:company_ids]) 

(我假设你” ve有意在您的创建操作中忽略了@perk.save调用...否则,应该包含编辑也是如此。 Model.new不存储记录。)

+0

非常感谢你 – Alam