我有两个班级学生和卫报。第三类Stud_guard管理学生和监护人课程之间的关系。下面给出了类的快照:
class Student < ActiveRecord::Base
has_one :stud_guards, :foreign_key => 'student_id', :dependent=>:destroy
end
class Guardian < ActiveRecord::Base
has_many :stud_guards, :dependent=>:destroy
end
class StudGuard < ActiveRecord::Base
belongs_to :student_id, :class_name => 'Student'
belongs_to :guardian_id, :class_name => 'Guardian'
end
在代码中,如果我执行@ guardian.stud_guards(其中@guardian包含有效的监护人项目),我就能够获得一组stud_guard条目。但是,如果我执行@ student.stud_guards(其中@student有一个有效的学生项目),我会得到 “未初始化的常量Student :: StudGuards” 错误。我似乎无法理解我在这里缺少的东西。
答案 0 :(得分:3)
#has_one
应将模型名称视为单数形式。
has_one :stud_guard
如果您编写has_one :stud_guards
,那么它正在查找名为StudGuards
的模型,该模型不存在且您收到错误。使用#has_one
时,Rails不会对关联名称stud_guards
应用#singularize
方法,而应用#camelcase
。
'stud_guards'.camelcase # => "StudGuards"
'stud_guard'.camelcase # => "StudGuard"
如果您注意到“未初始化的常量Student :: StudGuards”,很明显Rails会搜索模型StudGuards
,正如我在:stud_guards
中所说的那样推导出它。但是如果你写stud_guard
,它就会得到你已定义的StudGuard
。
希望它现在清除。
答案 1 :(得分:0)
试试这个:
class Student < ActiveRecord::Base
has_one :stud_guard, :foreign_key => 'student_id', :dependent=>:destroy
end
class Guardian < ActiveRecord::Base
has_many :stud_guards, :dependent=>:destroy
end
class StudGuard < ActiveRecord::Base
belongs_to :student_id, :class_name => 'Student'
belongs_to :guardian_id, :class_name => 'Guardian'
end
并使用它:
@student.stud_guard