【问题标题】:activerecord gone mad? or did I do something wrongactiverecord 疯了?还是我做错了什么
【发布时间】:2013-03-17 22:37:18
【问题描述】:

原来是这样的:

class Prijave < ActiveRecord::Base
   belongs_to :timovi
   belongs_to :liga
end

class Timovi < ActiveRecord::Base
    belongs_to :sportovi
    has_many :timoviusers, :dependent => :destroy
    has_many :prijaves, :dependent => :destroy
end

当我试图删除一个 Timovi 时,我得到了: 未初始化的常量 Timovi::Prijafe

同样,在控制台中

1.9.3p194 :001 > a=Timovi.find(6)
  Timovi Load (0.2ms)  SELECT `timovis`.* FROM `timovis` WHERE `timovis`.`id` = 6 LIMIT 1
1.9.3p194 :007 > a.prijaves
NameError: uninitialized constant Timovi::Prijafe

普里哈菲斯?我没有在任何地方声明...我在任何地方都没有...错误?我做错了什么吗? 谢谢

【问题讨论】:

  • 也许检查模型文件的名称。它可能被命名为 Prijafe.rb 虽然我真的不认为它会是那样。并检查您的迁移。
  • 不...它是 prijave.rb...我怀疑关于复数的一些事情...
  • 一种非常不规范的方式,但如果您使用 Linux,请转到应用程序的根目录并写入:grep -r "prijafe" .grep -r "Prijafe" . 这应该写给您该名称出现的位置。不要忘记最后的点

标签: ruby-on-rails ruby activerecord ruby-on-rails-3.2


【解决方案1】:

Active Record 使用主动支持变形器从复数形式中计算出类名应该是什么。这不是万无一失的,尤其是当这个词看起来不是英语时。

您可以添加变形器规则来教 rails 您想要使用的复数/单数(在初始化程序中应该有一个示例文件显示如何执行此操作),或者您可以将 :class_name 选项指定给 has_many 以便活动记录不必猜测类名。

【讨论】:

    【解决方案2】:

    “Prijafe”的复数形式是“Prijaves”

    所以当你调用 a.prijaves 时,你会得到未初始化的常量。

    这是一个链接:Ruby on Rails: How do you explicitly define plural names and singular names in Rails?

    【讨论】:

    • 是的..是 ActiveSupport::Inflector.inflections 做 |inflect| inflect.irregular 'Prijave', 'Prijaves' 结束
    猜你喜欢
    • 1970-01-01
    • 2011-05-02
    • 2011-07-21
    • 1970-01-01
    • 2010-12-14
    • 2023-04-08
    • 1970-01-01
    • 2017-08-23
    • 2011-06-04
    相关资源
    最近更新 更多