2013-05-02 43 views
5

我正在構建一個應用程序,該應用程序必須爲多個僱主分配一個任務。Rails 4:帶有has_many的複選框通過

我已經建立這些模型:

#assignment.rb 
class Assignment < ActiveRecord::Base 
    has_many :employer_assignments 
    has_many :employers, :through => :employer_assignments 
end 

#employer.rb 
class Employer < ActiveRecord::Base 
    has_many :employer_assignments 
    has_many :assignments, :through => :employer_assignments 
end 

#employer_assignment.rb 
class EmployerAssignment < ActiveRecord::Base 
    belongs_to :employer 
    belongs_to :assignment 
end 

,現在我想的形式保存到employer_assignment表,但我用我的形式,下面的代碼無法正常工作。

<div class="field"> 
    <%= f.label :employer_ids %><br /> 
    <%= collection_check_boxes(:assignment, :employer_ids, Employer.all, :id, :name) %> 
</div> 

我做了補充:employer_ids我分配控制從我嘗試發送這將創建一個作業,但不建立在employer_assignment表中的記錄形式。 當我通過控制檯添加它們(Assignment.last.employers < < Employer.all )它一切正常。我確定我錯過了一些東西,但無法弄清楚什麼。

在此先感謝。

+0

您是否找到解決方案。我有類似的問題。不保存到DB – Benjamin 2013-05-11 15:27:37

+1

IIRC導軌4默認使用強參數,不支持陣列類型。所以你需要明確地定義'employer_ids'應該是一個數組,以便被允許通過。 – 2013-06-24 08:38:43

回答

9

由於rails4中的強參數(@ emil-kampp提到過),您可能會在日誌中獲得Unpermitted parameters:,在新的rails生成後,它們會在您的控制器中生成。因此,使用你的代碼,它看起來是這樣的:

class EmployersController < ApplicationController 
    # <snip> 
    def update 
    @employer.update(employer_params) 
    end 

    def employer_params 
    params.require(:employer).permit(:name, { :employer_ids => [] }) 
    end 
end 

也可參閱所以這Question滿足此。希望這可以爲某人節省幾個週期。