gpt4 book ai didi

ruby-on-rails-3.1 - (对象不支持#inspect)

转载 作者:行者123 更新时间:2023-12-04 13:14:39 25 4
gpt4 key购买 nike

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

class Game < ActiveRecord::Base
has_many :snapshots

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

class Snapshot < ActiveRecord::Base
belongs_to :game

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

通过这些迁移:
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控制台中创建Snapshot实例,请使用
Snapshot.new

我懂了
(Object doesn't support #inspect)

现在大部分。如果我在snapshot.rb中注释掉了initialize方法,那么Snapshot.new就可以了。为什么会这样呢?
顺便说一句,我正在使用Rails 3.1和Ruby 1.9.2

最佳答案

发生这种情况是因为您重写了基类(ActiveRecord::Base)的initialize方法。在基类中定义的实例变量将不会初始化,并且#inspect将失败。

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

class Game < ActiveRecord::Base
has_many :snapshots

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

关于ruby-on-rails-3.1 - (对象不支持#inspect),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7690697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com