2015-04-20 67 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