3

我正在尝试将所有信息从数据库表保存到 JSON,如下所示:

File.open("tmp/users.json", 'wb') {|file| file << User.all.to_json }

问题是,在散列中缺少这些列:

t.string   "encrypted_password",       :default => "",   :null => false
t.string   "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer  "sign_in_count",            :default => 0
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string   "current_sign_in_ip"
t.string   "last_sign_in_ip"

所有这些列都来自Devise gem。如何将它们添加到最终的 JSON 文件中?

非常感谢。

4

2 回答 2

1

attr_accessible 已从 Rails 4 中删除。

不过,我建议您重写 as_json 方法以使其正常工作。

def as_json(options=nil)
  attrs = {
    only: [
      :id,
      :email,
      :confirmed_at,
      :locked_at
    ],
    methods: [:roles_list]
  }
  super (attrs.merge(options || {}))
end

尽管如此,我认为最好的选择是使用 ActiveModel::Serializer ( https://github.com/rails-api/active_model_serializers )。

于 2015-10-02T06:59:24.257 回答
0

尝试将您希望在 JSON 中看到的属性添加到该模型的白名单 attr_accessible 属性中。

例如:

attr_accessible :last_sign_in_at, :current_sign_in_at

如果您对该选项不满意,您可以覆盖模型的 as_json ,如下所示:

def as_json(options={})
  options["last_sign_in_at"] ||= self.last_sign_in_at
  super(options)
end
于 2013-07-24T01:02:32.200 回答