任何ActiveRecord对象上的JSON.dump都会失败

时间:2011-12-06 21:13:14

标签: ruby-on-rails json activerecord

我有一个运行Rails 3.1.3和JSON gem 1.6.3的项目,并且无法将任何ActiveRecord实例传递给JSON.dump。我总是收到以下错误:

NoMethodError: undefined method `[]=' for #<JSON::Ext::Generator::State:0x000001033f2088>
from /Users/andy/.rvm/gems/ruby-1.9.2-p180@project/gems/activerecord-3.1.3/lib/active_record/serialization.rb:10:in `serializable_hash'
from /Users/andy/.rvm/gems/ruby-1.9.2-p180@project/gems/activemodel-3.1.3/lib/active_model/serializers/json.rb:84:in `as_json'
from /Users/andy/.rvm/gems/ruby-1.9.2-p180@project/gems/activesupport-3.1.3/lib/active_support/json/encoding.rb:47:in `block in encode'
from /Users/andy/.rvm/gems/ruby-1.9.2-p180@project/gems/activesupport-3.1.3/lib/active_support/json/encoding.rb:78:in `check_for_circular_references'
from /Users/andy/.rvm/gems/ruby-1.9.2-p180@project/gems/activesupport-3.1.3/lib/active_support/json/encoding.rb:46:in `encode'
from /Users/andy/.rvm/gems/ruby-1.9.2-p180@project/gems/activesupport-3.1.3/lib/active_support/json/encoding.rb:31:in `encode'
from /Users/andy/.rvm/gems/ruby-1.9.2-p180@project/gems/activesupport-3.1.3/lib/active_support/core_ext/object/to_json.rb:20:in `to_json'
from /Users/andy/.rvm/gems/ruby-1.9.2-p180@project/gems/json-1.6.3/lib/json/common.rb:216:in `generate'
from /Users/andy/.rvm/gems/ruby-1.9.2-p180@project/gems/json-1.6.3/lib/json/common.rb:216:in `generate'
from /Users/andy/.rvm/gems/ruby-1.9.2-p180@project/gems/json-1.6.3/lib/json/common.rb:380:in `dump'

传递JSON.dump一个哈希,一个非ActiveRecord类的实例等,工作正常,#to_json适用于我的ActiveRecord实例。我不能只调用#to_json,因为它实际上是一个库,我将我的ActiveRecord对象传递给调用JSON.dump。但是,我完全没有跳过其他库,只是自己调用JSON.dump。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

根据以下链接,听起来JSON使用自己的编码覆盖to_json存在问题。

在线程中弹出几次的解决方法是将以下代码放入environment.rb文件中。

class Array
  def to_json(*a)
    ActiveSupport::JSON.encode(self)
  end
end