ruby-on-rails - 测试关联时 pry 出现奇怪错误

标签 ruby-on-rails rails-activerecord model-associations ruby-on-rails-4.2

所以当我尝试对我添加的关联进行相当简单的交互式测试时,我看到了这个奇怪的错误。这是两个模型:

class Lot < ActiveRecord::Base
  has_many :graves
  belongs_to :block
end

class Grave < ActiveRecord::Base
  belongs_to :lot
end

以下是表创建迁移:

class CreateGraves < ActiveRecord::Migration
  def change
    create_table :graves do |t|
      t.integer :grave_number
      t.integer :lot_id

      t.timestamps null: false
    end
  end
end

class CreateLots < ActiveRecord::Migration
  def change
    create_table :lots do |t|
      t.integer :lot_number
      t.integer :map_type

      t.timestamps null: false
    end
  end
end

我正在调用 pry:

pry -r ./config/environment.rb

然后在窥探 session 中我只是做:

lot = Lot.new
l.graves

我得到这个错误:

NameError: uninitialized constant Lot::Grafe
from /.../activerecord-4.2.6/lib/active_record/inheritance.rb:158:in `compute_type'

...只有我的 rbenv 安装路径和 ruby​​ 2.3.0 子目录链。我在那里替换了它以保持输出的可读性。

我在其他类上定义了其他几个类似的关联,并且所有这些都按预期工作。

最佳答案

这是 Rails 变形器的问题。它发生在奇怪的时间,是一个奇怪的 Rails 怪癖。

2.3.1 :004 > a = "Grave"
 => "Grave"
2.3.1 :005 > a.pluralize
 => "Graves"
2.3.1 :006 > a = "graves"
 => "graves"
2.3.1 :007 > a.singularize
 => "grafe"

您可以在经常被忽视的 ./config/inflections.rb 文件中覆盖默认行为 :)

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.irregular 'grave', 'graves'
end

改变后

2.3.1 :001 > a = "grave"
 => "grave"
2.3.1 :002 > a.pluralize
 => "graves"
2.3.1 :003 > a = "graves"
 => "graves"
2.3.1 :004 > a.singularize
 => "grave"

关于ruby-on-rails - 测试关联时 pry 出现奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38685238/

相关文章:

ruby-on-rails-3 - 如何取消 before_add 关联回调中的保存?

ruby-on-rails - 在 Node.JS 中创建管理面板的最佳方法

ruby-on-rails - 通过关联查找 activerecord

ruby-on-rails - 使用开放URI和回形针存储图像,且其大小小于10kb

ruby-on-rails - rails : validate uniqueness of two columns (together)

ruby-on-rails - 按 created_at 或 updated_at(以较新的为准)排序 Ruby on Rails

ruby-on-rails - 访问关联集合中的下一条记录

ruby-on-rails - ActiveRecords 未调用正确的 SQL 语句

ruby-on-rails - Boolean Enum throws Action can't be blank for false value in Rails-Admin

ruby-on-rails - Rails 与 namespace 的多态关联