Ruby on rails 3.1 (对象不支持检查)

Ruby on rails 3.1 (对象不支持检查),ruby-on-rails-3.1,ruby-1.9.2,Ruby On Rails 3.1,Ruby 1.9.2,我有一个简单的案例,涉及两个模型类: class Game < ActiveRecord::Base has_many :snapshots def initialize(params={}) # ... end end class Snapshot < ActiveRecord::Base belongs_to :game def initialize(params={}) # ... end end 我明白了 好的部分。如果我注释掉sna

我有一个简单的案例,涉及两个模型类:

class Game < ActiveRecord::Base
  has_many :snapshots

  def initialize(params={})
   # ...
  end
end

class Snapshot < ActiveRecord::Base
  belongs_to :game

  def initialize(params={})
  # ...
  end
end
我明白了

好的部分。如果我注释掉snapshot.rb中的initialize方法,那么snapshot.new可以工作。为什么会这样?
顺便说一句,我使用的是Rails 3.1和Ruby 1.9.2,这是因为您重写了基类ActiveRecord::base的initialize方法。基类中定义的实例变量将不会初始化,并且检查将失败

要解决此问题,您需要在子类中调用super:

class Game < ActiveRecord::Base
  has_many :snapshots

  def initialize(params={})
   super(params)
   # ...
  end
end

我不知道确切的原因,但我在关联的类定义中将“属于”误拼写为“属于”时出现了这个错误。

我在这样的模型中进行序列化时出现了这个症状

serialize :column1, :column2
需要像

serialize :column1
serialize :column2

在初始化后实现时也会发生这种情况,特别是当您试图访问select中未包含的属性时。例如:

after_initialize do |pet|
  pet.speak_method ||= bark  # default
end
若要修复,请添加属性是否存在的测试:

after_initialize do |pet|
  pet.speak_method ||= bark if pet.attributes.include? 'speak_method'  # default`
end

试着打电话,有效吗?查看是否可以获得更有用的错误


在我的例子中,我从一个代码块中得到了这个错误,该代码块创建了我的一个模型的新实例,并为其字段赋值。事实证明,我的代码为Rails无法与字段类型匹配的字段之一赋值。打电话有效吗?在新对象上,给了我一个更有用的错误未定义方法“to_f”,用于我在尝试将Desive authentication与现有用户模型集成后遇到了这个问题,我通过运行以下命令解决了这个问题:

$spring stop

不知道确切的原因,但希望它能帮助某人。

你为什么要将参数传递给super?ActiveRecord::Base将如何处理它?我将serialize:description、Array正确地写成serialize:description,:arrayI在使用HashSerializer调用_json不正确地序列化jsonb列时遇到了类似的问题。我设法将字符串JSON放入jsonb列中,这会使Rails读取数据的过程变得混乱。虽然这可能不是您的问题,但当自定义inspect方法中出现错误时,就会出现这种情况。原始错误不可见,这可能会让人恼火。
after_initialize do |pet|
  pet.speak_method ||= bark  # default
end
after_initialize do |pet|
  pet.speak_method ||= bark if pet.attributes.include? 'speak_method'  # default`
end
$spring stop