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

时间:2018-06-03 16:08:41

标签: ruby-on-rails devise associations simple-form

我有两个模型老师和学生,我在其中两个之间建立了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引入用户身份验证后,我也只是遇到了这个问题。

1 个答案:

答案 0 :(得分:2)

按照这样的步骤

控制器中的

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及此关系。

如果不起作用,最好发布带有关系的模型。