在Rails 4中,如何在has_many中通过关联创建一个在连接表中创建新行的表单?具体来说,我将什么传递给我的check_box()输入?
实施例: 学生报名参加许多课程。这是has_many到has_many的关联。我的联接表是“student_course_assignments”。
型号:
Student
has_many :student_course_assignments
has_many :courses, through: :student_course_assignments
accepts_nested_attributes_for :student_course_assignments
Course
has_many :student_course_assignments
has_many :students, through: :student_course_assignments
StudentCourseAssignment
belongs_to :student
belongs_to :course
控制学生
def show
@student.student_course_assignments.build
end
在myapp.com/student/1
# This form lets you add new rows to student_course_assignments, for the given student.
<%= form_for @student do |f| %>
<%= f.fields_for :student_course_assignments do |join_fields| %>
<% Courses.all.each do |course| %>
<%= join_fields.checkbox(course.id) %> # What should be passed in here??
<span><%= course.name %></span>
<% end %>
<% end %>
<% end %>
关于如何构建显示每个课程复选框的表单的任何建议,并让我检查应该添加到student_course_assignemnts数据库的课程将不胜感激。
答案 0 :(得分:0)
<强> ActiveRecord的强>
您可能正在寻找<<
ActiveRecord功能:
#config/routes.rb
resources :students do
#could be a member route
match :add, via: [:get, :post]
end
#app/controller/students_controller.rb
def add
@student = Student.find(params[:student_id])
if request.post?
@course = Course.find(params[:course_id])
@student.student_course_assignments << @course
end
end
#app/views/students/add.html.erb
<%= form_for @student, method: :post do |f| %>
<%= f.text_field :course_id %>
<% end %>
<强>此致强>
对于你的代码,我会这样做:
<%= form_for @student do |f| %>
<% Courses.all.each do |course| %>
<%= f.checkbox :student_course_assignment_ids, course.id %>
<span><%= course.name %></span>
<% end %>
<% end %>
我认为这将填充:student_course_assignments的集合。如果您没有创建新的accepts_nested_attributes_for
对象
course