嵌套形式 rails 4 在创建时保存现有记录

nested form rails 4 save existing record on create

我正在努力让它工作。我有三个模型

  1. 学生
  2. 教室布置
  3. 教室

使用 has_many :through 关系。我的所有关系都已正确定义,并且我已使用 accepts_nested_attributes.

设置了嵌套表单

因此,在创建新学生时,我想从教室列表中 select 而不是创建新教室。表单部分也可以正常工作,我没有得到的部分是当我创建学生时它抱怨以下错误。

无法为 ID=

的学生找到 ID=3 的教室

我已经搜索了几天,但找不到我需要的答案。

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])

您的参数处理不支持嵌套。您可以查看服务器日志中的请求参数或检查生成的表单的字段名以确定您的目标。这将是

的内容
def student_params
  params.require(:student).permit(:student => [:name, :classroom => [:id, :name]])
end

或者如下所示。在第二种情况下,我不假设表单中的所有内容都嵌套在学生容器下。另请注意从教室切换到 classroom_attributes,这是我有时需要进行的更改,即使上面的表格是文档所指示的。

def student_params
  params.require(:name).permit(:classroom_attributes => [:id, :name])
end

希望这能让您了解如何根据表单生成的内容定制参数定义。另请注意,您的错误消息会指示您定义的哪一部分失败,例如,您引用的错误中缺少学生 ID。