Rails 4:带有has_many的复选框

时间:2013-05-02 13:52:51

标签: has-many-through ruby-on-rails-4

我正在构建一个必须为多个雇主分配作业的应用程序。

我已经建立了这些模型:

#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_id,我尝试发送创建分配但不在employees_assignment表中创建记录的表单。 当我通过控制台添加它们时(Assignment.last.employers&lt;&lt; Employer.all )一切正常。我确定我错过了一些但却无法弄明白的东西。

提前致谢。

1 个答案:

答案 0 :(得分:9)

由于rails4中的强参数(@ emil-kampp提到这一点),你的日志中可能会得到Unpermitted parameters:,在生成新轨道后,它们会在你的控制器中生成。所以使用你的代码看起来像是:

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

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

另见SO上的Question可以解答这个问题。希望这可以节省几个周期。