我有两个班学生和监护人。第三类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 (其中@守护者包含一个有效的守护者项),我可以获得一个stud_guard条目数组。但是,如果我执行@student.stud_guards (其中@学生会有一个有效的学生项),就会得到一个“未初始化的常量学生::StudGuards”错误。我似乎不明白我在这里错过了什么。
发布于 2014-07-08 09:28:45
#has_one应该将模型名作为单数形式。
has_one :stud_guard如果您编写了has_one :stud_guards,那么它将查找一个名为StudGuards的模型,该模型不存在,因此您得到了错误。使用#has_one,Rails不会将#singularize方法应用到关联名称stud_guards上,而是应用于#camelcase。
'stud_guards'.camelcase # => "StudGuards"
'stud_guard'.camelcase # => "StudGuard" 如果您注意到“未初始化的常量学生::StudGuards”,很明显,Rails搜索模型StudGuards,正如我从:stud_guards中所说的那样。但是,如果您编写stud_guard,它将得到您定义的StudGuard。
希望现在一切都明朗了。
发布于 2014-07-08 09:29:26
试试这个:
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_guardhttps://stackoverflow.com/questions/24628242
复制相似问题