RoR未初始化常数

时间:2014-07-08 09:25:04

标签: ruby-on-rails ruby ruby-on-rails-2

我有两个班级学生和卫报。第三类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” 错误。我似乎无法理解我在这里缺少的东西。

2 个答案:

答案 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