Как изменить значения, переопределяющие метод to_json? - PullRequest
6 голосов
/ 01 марта 2011

Я использую Ruby on Rails 3 и хочу переопределить метод to_json.

В настоящее время я использую следующий код, чтобы избежать экспорта важной информации.

  def to_json
    super(
      :except => [
        :password
      ]
    )
  end

Если я хочу изменить значение, используя этот метод, как я могу это сделать?

Например, я хотел бы использовать имя пользователя с заглавной буквы

:name => name.capitalize

при получении этого

@user.to_json

Ответы [ 2 ]

10 голосов
/ 02 марта 2011

Если вы хотите 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

Вот хороший пост о различиях между to_json и as_json .

0 голосов
/ 02 марта 2011

Используйте параметр :methods для to_json.

http://apidock.com/rails/ActiveRecord/Serialization/to_json

...