首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在通过字段访问has_many时具有不同类名的“未初始化常量”错误

在通过字段访问has_many时具有不同类名的“未初始化常量”错误
EN

Stack Overflow用户
提问于 2015-10-24 04:34:38
回答 3查看 71关注 0票数 2

对于这段代码,在我的部分:

代码语言:javascript
复制
<% if build.optical_drives.blank? %>

我得到了这个错误:

代码语言:javascript
复制
uninitialized constant Build::OpticalDrife

尽管我没有在任何地方错误地输入OpticalDrife

我有以下关系:

代码语言:javascript
复制
class OpticalDrive < ActiveRecord::Base
    has_many :optical_drive_builds
    has_many :optical_drives, through: :optical_drive_builds
end
class OpticalDriveBuild < ActiveRecord::Base
    has_many :optical_drives
#   has_many :builds
end
class Build < ActiveRecord::Base
  has_many :optical_drive_builds
  has_many :optical_drives, :through => :optical_drive_builds
end
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-24 09:28:03

这是由于rails的奇异化和多重化误差造成的。由于像knives这样的单词有一个单数形式knife,rails错误地将drives奇异化为drife

我已经通过在我的config/initializers/inflection.rb中添加以下内容来解决这个问题

代码语言:javascript
复制
 ActiveSupport::Inflector.inflections(:en) do |inflect|
    inflect.irregular 'drive', 'drives'
 end

更多网址:http://www.sadafnoor.com/blog/interesting-problem-fixed-with-rails-inflections/

票数 2
EN

Stack Overflow用户

发布于 2015-10-24 04:45:14

我们有一个名为:class_name的选项:

指定关联的类名。只有当不能从关联名称推断该名称时,才使用该名称。因此,has_many :产品在默认情况下将链接到products,但是如果真实的类名是SpecialProduct,则必须使用此选项指定它。

代码语言:javascript
复制
has_many :optical_drives, :through => :optical_drive_builds, class_name: 'OpticalDrive' 
票数 3
EN

Stack Overflow用户

发布于 2015-10-24 10:25:38

曲曲

要给出为什么会出现此错误的上下文,线索在名称中:

Build::OpticalDrife

只有当Rails采用drives并试图将其变为单数时,这种情况才会发生。

虽然这在大多数情况下效果很好,但事实仍然是,它有时会出错。

解决方法是显式地定义class_name

代码语言:javascript
复制
has_many :optical_drives, through: :optical_drive_builds, class_name: "OpticalDrive"

这将显式地设置class_name,这将保存插值问题。

但是,解决这个问题的真正方法是在应用程序(sadaf2605的答案)和中定义内插。

代码语言:javascript
复制
#config/locales/en.yml
en:
  activerecord:
    models:
      optical_drive: OpticalDrive
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33314582

复制
相关文章

相似问题

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