Rails 不保存来自具有多对多关联的模型的复选框输入

Rails not saving checkbox input from model with many-to-many association

我有两个模型Teacher和Student,我在他们两个之间建立了一个HABTM关系。我有一个表格供他们每个人在数据库中创建一条新记录。例如,在创建教师表单中,用户可以输入教师姓名作为输入,并勾选包含不同学生姓名的复选框。如果用户勾选一个框,输入将不会被保存,但如果复选框留空并且用户只是输入名字,一个新的记录被保存。奇怪的是,如果用户更新了教师,那是用户唯一可以选择学生以包含在教师记录中的时间。

TeacherController 中的一些方法是这样的:

def new
  @teacher = current_user.teachers.build
end

def create
  @teacher = current_user.teachers.build(teacher_params)

  if @teacher.save
    redirect_to root_path
  else
    render 'new'
  end
end

def edit
end

def update
  if @teacher.update(teacher_params)
    redirect_to teacher_path(@teacher)
  else
    render 'edit'
  end
end

private
  def teacher_params
    params.require(:teacher).permit(:name, :student_ids => [])
  end

  def search_teacher
    @teacher = Teacher.find(params[:id])
  end

下面是我用来创建新教师和更新现有教师的表格:

<%= simple_form_for @teacher do |f| %>
  <%= f.input :name, label: "Teacher's Name" %>
  <label>Students</label>
  <br>
  <%= f.collection_check_boxes :student_ids, Student.all, :id, :name %>
  <br>
  <%= f.button :submit %>
<% end %>

注意到我只是在我的应用程序中使用 devise 引入用户身份验证后才遇到这个问题。

按照这样的步骤操作

在控制器中

def create
   @teacher = Teacher.new(teacher_params)
   @teacher.user= current_user
   if @teacher.save
     # code
   else
     # code
   end
end

private
def teacher_params
   params.require(:teacher).permit(:name, student_ids: [])
end

形式

<%= f.collection_check_boxes :student_ids, Student.all, :id, :name do |cb| %>
    <% cb.label(class: "checkbox-inline input_checkbox") {cb.check_box(class: "checkbox") + cb.text } %>
<% end %>

看到collection_check_boxes和这个关系。

如果不行,最好post有关系的模型。