我在测试我的 Rails 应用程序时遇到了以下问题。
使用 EventMachine 发出异步 HTTP 请求时,由于某种原因,我无法在回调中使用 ActiveRecord 对象。每当我尝试访问该对象时,都会出现以下异常:
/home/user/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.18/lib/active_record/attribute_methods.rb:144:in `create_time_zone_conversion_attribute?': You have a nil object when you didn't expect it! (NoMethodError)
You might have expected an instance of Array.
The error occurred while evaluating nil.include?
from /home/user/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.18/lib/active_record/attribute_methods.rb:75:in `define_attribute_methods'
from /home/user/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.18/lib/active_record/attribute_methods.rb:71:in `each'
from /home/user/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.18/lib/active_record/attribute_methods.rb:71:in `define_attribute_methods'
from /home/user/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.18/lib/active_record/attribute_methods.rb:257:in `method_missing'
如果我从回调中删除 ActiveRecord 对象,它可以正常工作。不幸的是,我真的需要它们可以访问,所以删除不是一种选择。
我是否访问对象以进行读取或写入都没有关系。
我写的代码看起来像这样:
http = EM::HttpRequest.new(url).get(:query => query)
http.callback do
....
object.status = 'delivered'
object.save!
....
end
至于环境,我有以下设置:
- Ubuntu 12.04 LTS
- 红宝石 1.8.7-p371
- 导轨 2.3.18
- 瘦服务器 1.5.0
- 活动记录 2.3.18
- 事件机 1.0.0
有谁知道可能导致此错误的原因?如何解决这个问题?
提前致谢!