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

标签 ruby-on-rails json ruby-on-rails-3 devise

我正在使用 to_json我通过执行以下操作创建的模型对象上的方法:
user = User.find(1)
当我这样做时 user.to_json ,缺少很多属性,包括user.id来自编码的 JSON 字符串。似乎我从 User 模型中添加为 attr_accessible 的所有属性都在那里,但没有其他属性。也许这就是 to_json 正在做的事情,但我认为添加 id到 attr_accessible 是不行的。

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

更新

这看起来是 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

这是一个简单的散列,它是在 AR 中生成 JSON 的一种非常强大的方法,而不会弄乱 to_json方法。

关于ruby-on-rails - Ruby on Rails 3 - to_json 不包括所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6866480/

相关文章:

ruby-on-rails - Omniauth "with"STI 和设计

ruby-on-rails - Rails ActiveRecord 关系助手如何允许诸如 `user.groups.new` 之类的方法?

ruby-on-rails - 如何在不运行 Rails 回调的情况下保存模型

json - 如何通过Flutter中的共享首选项将Text Input数据以json格式保存在本地?

mysql - gem在rails中安装mysql问题

ios - 编码其模型中没有嵌套属性的嵌套对象

javascript - 如何使用 javascript、JSON、python 和 mongodb 之间的日期时间?

ruby-on-rails - 如何将数组输出为 JSON?

ruby-on-rails - rails 3.2 : Adding seed tasks from a mountable engine

ruby-on-rails - 重新分配 ActiveRecord 实例和相应的外键