Rails:在我发出请求后,类'object_id发生了变化

时间:2010-03-24 16:15:46

标签: ruby-on-rails ruby gem

我真的无法解释这种行为,请注意在我发出请求之后,类'对象id已经改变了,因此我的is_a?评估返回false。

任何想法?我甚至不确定如何调试这个。此外,这与从命令行发出请求无关。 Web服务器也表现出相同的行为,从命令行解释起来更容易。

staging$ RAILS_ENV=staging script/console
Loading staging environment (Rails 2.3.2)
>> c = CartItem.new
=> #<CartItem id: nil, order_id: nil, order_source: nil, date: nil, user_id: nil, created_at: nil, updated_at: nil, paid: nil, payment_id: nil, values: nil, cart_description: nil, type: nil, price: nil, email: nil, error: nil>
>> c.class.object_id
=> 70151495336400
>> CartItem.object_id
=> 70151495336400
>> c.is_a? CartItem
=> true
>> app = ActionController::Integration::Session.new
=> #<ActionController::Integration::Session:0x7f9ad5c55db0 .... >
>> app.get("site/favorite")
=> 200
>> c.class.object_id
=> 70151495336400
>> CartItem.object_id
=> 70151496019760
>> c.is_a? CartItem
=> false
>> c.class
=> CartItem(id: integer, order_id: string, order_source: string, date: date, user_id: integer, created_at: datetime, updated_at: datetime, paid: boolean, payment_id: integer, values: text, cart_description: string, type: string, price: integer, email: string, error: string)

2 个答案:

答案 0 :(得分:1)

每个新上下文(请求/响应周期)都将重新生成对象ID。您可能希望使用responds_to?,而不是is_a?

答案 1 :(得分:1)

由于ActionController::Integration模块用于集成测试,get一个url会重新加载您的类,因此重新定义CartItem标识符。你现在基本上有两个 CartItem类,一个在你的堆栈上闲逛而没有一个标识符指向它(“旧的”)和一个由CartItem标识符引用的类。