首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RoR未初始化常数

RoR未初始化常数
EN

Stack Overflow用户
提问于 2014-07-08 09:25:03
回答 2查看 357关注 0票数 0

我有两个班学生和监护人。第三类Stud_guard管理学生和守护者类之间的关系。这些类的快照如下:

代码语言:javascript
复制
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”错误。我似乎不明白我在这里错过了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-08 09:28:45

#has_one应该将模型名作为单数形式。

代码语言:javascript
复制
has_one  :stud_guard

如果您编写了has_one :stud_guards,那么它将查找一个名为StudGuards的模型,该模型不存在,因此您得到了错误。使用#has_one,Rails不会将#singularize方法应用到关联名称stud_guards上,而是应用于#camelcase

代码语言:javascript
复制
'stud_guards'.camelcase # => "StudGuards" 
'stud_guard'.camelcase # => "StudGuard" 

如果您注意到“未初始化的常量学生::StudGuards”,很明显,Rails搜索模型StudGuards,正如我从:stud_guards中所说的那样。但是,如果您编写stud_guard,它将得到您定义的StudGuard

希望现在一切都明朗了。

票数 3
EN

Stack Overflow用户

发布于 2014-07-08 09:29:26

试试这个:

代码语言:javascript
复制
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

并把它当作:

代码语言:javascript
复制
@student.stud_guard
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24628242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档