我有两个模型老师和学生,我在其中两个之间建立了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
引入用户身份验证后,我也只是遇到了这个问题。
答案 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
及此关系。
如果不起作用,最好发布带有关系的模型。