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
我没有检查,但我相信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方法.