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_id
和 enrollment_id
。因此不需要创建新模型来处理您的关联。 Rails 已经为您做到了。
之后,在你的控制器中,确保 accepted_params 有这个:
控制器:
def course_params
params.require(:course).permit(
...
enrollments_ids: []
def enrollment_params
params.require(:enrollment).permit(
...
courses_ids: []
我想完成的和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_id
和 enrollment_id
。因此不需要创建新模型来处理您的关联。 Rails 已经为您做到了。
之后,在你的控制器中,确保 accepted_params 有这个:
控制器:
def course_params
params.require(:course).permit(
...
enrollments_ids: []
def enrollment_params
params.require(:enrollment).permit(
...
courses_ids: []