我正在努力让这个工作。我有三个型号
使用has_many:through关系。我的所有关系都已正确定义,并且我使用accepts_nested_attributes设置了嵌套表单。
因此,在创建新学生时,我想从教室列表中进行选择,而不是创建新教室。表单部分工作正常我没有得到的部分是当我创建学生它抱怨以下错误。
对于ID =
的学生,无法找到ID = 3的Classrooom我现在已经搜索了几天但是无法得到我需要的答案才能使这个工作。
def new
@student = Student.new
@student.classrooms.build
end
def edit
end
def create
@student = Student.new(student_params)
respond_to do |format|
if @student.save
format.html { redirect_to @student, notice: 'Student was successfully created.' }
format.json { render :show, status: :created, location: @student }
else
format.html { render :new }
format.json { render json: @student.errors, status: :unprocessable_entity }
end
end
end
有人可以帮忙,有人必须在此之前面对这个问题吗?
同样在rails控制台中,当我运行以下代码时,它可以工作:
classroom = Classroom.last
student = Student.create(name: 'Dave', classrooms:[classroom])
答案 0 :(得分:0)
您的参数处理不支持嵌套。您可以查看服务器日志中的请求参数,或检查生成的表单的字段名以确保您的目标。
这将是一件好事def student_params
params.require(:student).permit(:student => [:name, :classroom => [:id, :name]])
end
或者如下所示。在第二种情况下,我不假设表单中的所有内容都嵌套在学生容器下。另请注意从教室到教室_属性的切换,这是我有时需要进行的更改,即使上面的表单是文档所指示的内容。
def student_params
params.require(:name).permit(:classroom_attributes => [:id, :name])
end
希望这能为您提供如何根据表单生成的内容定制参数定义的概念。另请注意,您的错误消息可以指示您定义的哪个部分失败,例如您引用的错误中缺少学生ID。