2013-05-02 53 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满足此。希望这可以为某人节省几个周期。