rails 上的多对多关联质量分配复选框 ruby 4

many to many association mass assign checkboxes ruby on rails 4

我想完成的和this几乎一模一样! railscast 教程,但无法 work.I 有一个课程 table 和一个注册 table 他们有一个多对多的关系,所以我有一个连接 table 叫做 "courses_enrollments" 我希望能够从一个表格中同时向注册中添加许多课程...我使用了 has_many_through 关系并遍历了表格中的所有课程以及我拥有的每个课程一个复选框,这样我就可以将它们添加到注册中,但是当我保存时没有任何反应,我的加入 table (courses_enrollments) 永远不会充满我想要的关系....这是我的模型:

课程:

class Course < ActiveRecord::Base
    has_many :courses_enrollments
    has_many :enrollments, :through => :courses_enrollments

注册人数:

class Enrollment < ActiveRecord::Base
    has_many :courses_enrollments
    has_many :courses, :through => :courses_enrollments

和courses_enrollments:

class CoursesEnrollment < ActiveRecord::Base
    belongs_to :courses
    belongs_to :enrollments
end

最后是我的注册表格视图:

<%= form_for(@enrollment) do |f| %>
  <% if @enrollment.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@enrollment.errors.count, "error") %> prohibited this enrollment from being saved:</h2>

      <ul>
      <% @enrollment.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :state %><br>
    <%= f.collection_select(:state, Courses.all, :id, :name, {:include_blank => true}, {:multiple => false}) %>
  </div>

我也在表格中这样尝试过....但这里也没有保存任何内容

 <% Courses.all.each do |course|%>
    <%= check_box_tag "enrollment[course_id][]", course.id %>
    <%= course.name %>
  <% end %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我希望能够将许多记录保存到连接 table 中,该连接保存我正在创建或更新的注册与我选择的课程之间的关系,并且有很多关联....感谢帮助

型号:

class Course < ActiveRecord::Base
  has_and_belongs_to_many :enrollments

class Enrollment < ActiveRecord::Base
  has_and_belongs_to_many :courses

使用这种类型的关联,您最终会得到一个连接 table,其中将包含 course_idenrollment_id。因此不需要创建新模型来处理您的关联。 Rails 已经为您做到了。

之后,在你的控制器中,确保 accepted_params 有这个:

控制器:

def course_params
  params.require(:course).permit(
    ...
    enrollments_ids: []

def enrollment_params
  params.require(:enrollment).permit(
    ...
    courses_ids: []