首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(Object不支持#inspect)

(Object不支持#inspect)
EN

Stack Overflow用户
提问于 2011-10-08 01:23:52
回答 6查看 17.9K关注 0票数 8

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

代码语言:javascript
运行
复制
class Game < ActiveRecord::Base
  has_many :snapshots

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

class Snapshot < ActiveRecord::Base
  belongs_to :game

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

通过这些迁移:

代码语言:javascript
运行
复制
class CreateGames < ActiveRecord::Migration
  def change
    create_table :games do |t|
      t.string :name
      t.string :difficulty
      t.string :status

      t.timestamps
    end
  end
end

class CreateSnapshots < ActiveRecord::Migration
  def change
    create_table :snapshots do |t|
      t.integer :game_id
      t.integer :branch_mark
      t.string  :previous_state
      t.integer :new_row
      t.integer :new_column
      t.integer :new_value

      t.timestamps
    end
  end
end

如果我尝试在rails控制台中创建快照实例,请使用

代码语言:javascript
运行
复制
Snapshot.new

我得到了

代码语言:javascript
运行
复制
(Object doesn't support #inspect)

现在是最好的部分。如果我注释掉snapshot.rb中的initialize方法,那么Snapshot.new就可以工作了。为什么会发生这种情况?

顺便说一句,我使用的是Rails 3.1和Ruby 1.9.2

EN

回答 6

Stack Overflow用户

发布于 2011-11-10 07:15:29

这是因为您重写了基类(ActiveRecord:: base )的initialize方法。基类中定义的实例变量将不会初始化,#inspect将失败。

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

代码语言:javascript
运行
复制
class Game < ActiveRecord::Base
  has_many :snapshots

  def initialize(params={})
   super(params)
   # ...
  end
end
票数 10
EN

Stack Overflow用户

发布于 2013-07-03 22:48:04

当我在这样的模型中进行序列化时,我出现了这种症状;

代码语言:javascript
运行
复制
serialize :column1, :column2

需要像这样;

代码语言:javascript
运行
复制
serialize :column1
serialize :column2
票数 8
EN

Stack Overflow用户

发布于 2019-06-04 13:47:42

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

代码语言:javascript
运行
复制
after_initialize do |pet|
  pet.speak_method ||= bark  # default
end

要修复此问题,请添加对该属性是否存在的测试:

代码语言:javascript
运行
复制
after_initialize do |pet|
  pet.speak_method ||= bark if pet.attributes.include? 'speak_method'  # default`
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7690697

复制
相关文章

相似问题

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