Ruby on Rails 3 - to_json不包括所有属性

ran*_*its 14 json ruby-on-rails devise ruby-on-rails-3

我正在使用to_json我创建的模型对象上的方法,通过执行以下操作:

user = User.find(1)

当我这样做时user.to_json,很多属性都会丢失,包括user.id来自编码的JSON字符串.看来我从User模型添加为attr_accessible的所有属性都存在,但没有其他属性.也许这就是to_json正在做的事情,但我认为添加id到attr_accessible是不行的.

解决这个问题的正确方法是什么?

UPDATE

这看起来是Devise的一个特定问题.如果我从user.rb注释掉以下内容,一切都按预期工作:

devise :rememberable, :trackable, :token_authenticatable, :omniauthable

kai*_*ain 5

我没有检查,但我相信Devise为你做了这件事; 它仅通过attr_accessible包含某些属性.

在任何情况下,解决此问题的正确方法是覆盖as_json方法,如下所示:

def as_json(options = nil)
  {
    my_attr: my_attr,
    etc: etc
  }
end
Run Code Online (Sandbox Code Playgroud)

这是一个简单的哈希,它是一个非常强大的方法,可以在AR中生成JSON,而不会弄乱to_json方法.