如何更改覆盖'to_json'方法的值?

use*_*052 7 ruby json overriding ruby-on-rails ruby-on-rails-3

我正在使用Ruby on Rails 3,我想覆盖该to_json方法.

这时我使用以下代码以避免导出重要信息.

  def to_json
    super(
      :except => [
        :password
      ]
    )
  end
Run Code Online (Sandbox Code Playgroud)

如果我想使用该方法更改值,我该怎么办?

例如,我想将用户名大写

:name => name.capitalize
Run Code Online (Sandbox Code Playgroud)

检索这个

@user.to_json
Run Code Online (Sandbox Code Playgroud)

zet*_*tic 11

如果你想render :json => @user在控制器中使用Rails 3,你可以as_json在模型中覆盖:

class User < ActiveRecord::Base
  def as_json(options={})
    result = super({ :except => :password }.merge(options))
    result["user"]["name"] = name.capitalize
    result
  end
end
Run Code Online (Sandbox Code Playgroud)

这是关于to_json和as_json之间差异的好文章.