我有两个型号
class Course < AR::B
belongs_to :teacher
end
class Teacher < AR::B
has_one :course
end
所以我的表courses
有一个字段teacher_id
。我选择了一个像魅力一样的老师的课程。
但是我想在EDIT TEACHER屏幕上添加一个下拉菜单来改变课程。我试过f.collection_select :course, Courses.all, :id, :name
。这将显示下拉列表,并显示在控制器上:
teacher_params[:course] = Course.find(teacher_params[:course])
因为我收到错误Expecting Course got String.
如果我只是尝试使用@teacher.save
。但这不适用
实现这一目标的正确方法是什么?
答案 0 :(得分:1)
在您的表单中,确保您正在设置数据库列(而不是关联)
= f.collection_select :course_id, Courses.all, :id, :name
^^^^^
答案 1 :(得分:0)
在编辑页面上,您应该按ID找到该课程,并直接指定teacher_id
,或者也可以找到教师模型并将其设置为Course#teacher
。
假设你的params回来了
之类的东西{ course: { id: 1, teacher_id: 5 } }
对于选项1,您的控制器可能看起来像
@course = Course.find(teacher_params[:id])
@course.teacher_id = teacher_params[:teacher_id]
或选项2
@course = Course.find(teacher_params[:id])
@teacher = teacher_params[:teacher_id]
@course.teacher = @teacher
现在保存课程应该没问题
答案 2 :(得分:0)
使用:
class Teacher < AR::B
has_one :courses
end
你正在使用:当然,它必须是复数 第二件事f.collection_select:当然, Courses.all,:id,:name 这是错误的,这是正确的方法
f.collection_select :course, Course.all, :id, :name