对于这段代码,在我的部分:
<% if build.optical_drives.blank? %>我得到了这个错误:
uninitialized constant Build::OpticalDrife尽管我没有在任何地方错误地输入OpticalDrife。
我有以下关系:
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发布于 2015-10-24 09:28:03
这是由于rails的奇异化和多重化误差造成的。由于像knives这样的单词有一个单数形式knife,rails错误地将drives奇异化为drife。
我已经通过在我的config/initializers/inflection.rb中添加以下内容来解决这个问题
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.irregular 'drive', 'drives'
end更多网址:http://www.sadafnoor.com/blog/interesting-problem-fixed-with-rails-inflections/
发布于 2015-10-24 04:45:14
我们有一个名为:class_name的选项:
指定关联的类名。只有当不能从关联名称推断该名称时,才使用该名称。因此,has_many :产品在默认情况下将链接到products,但是如果真实的类名是SpecialProduct,则必须使用此选项指定它。
has_many :optical_drives, :through => :optical_drive_builds, class_name: 'OpticalDrive' 发布于 2015-10-24 10:25:38
曲曲
要给出为什么会出现此错误的上下文,线索在名称中:
Build::OpticalDrife
只有当Rails采用drives并试图将其变为单数时,这种情况才会发生。
虽然这在大多数情况下效果很好,但事实仍然是,它有时会出错。
解决方法是显式地定义class_name:
has_many :optical_drives, through: :optical_drive_builds, class_name: "OpticalDrive"这将显式地设置class_name,这将保存插值问题。
但是,解决这个问题的真正方法是在应用程序(sadaf2605的答案)和这中定义内插。
#config/locales/en.yml
en:
activerecord:
models:
optical_drive: OpticalDrivehttps://stackoverflow.com/questions/33314582
复制相似问题