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有关系的模型。
我有两个模型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有关系的模型。