Как переопределить метод "as_json" или "to_json" для "reply_to" без указания указанной информации?

Я использую Ruby on Rails 3, и я хотел бы переопределить (возможно, в файле модели) метод as_json или to_json для respond_to HTTP-запроса без включения некоторой информации.

В моей модели учетной записи у меня есть

def as_json(options = {})
  super(
    :except => [
      :password
    ]
  )
end

В моем контроллере у меня есть

format.json {
  render :json => @account, :status => 200
}

Когда я делаю запрос, например, /account/1.json, у меня есть также атрибуты пароля, которые по соображениям безопасности я не хочу.

Итак, , как я могу предотвратить включение указанной информации?


Я могу это сделать, и он работает

format.json {
  render :json => @account.to_json(:except => [:password]), :status => 200
}

но мне нужно реорганизовать.

Ответ 1

Если это только одно действие, вы можете попробовать:

format.json { render :json => @account, :except => :password }

если вам понадобится более одного действия, чем переопределение будет лучше:

# Exclude password info from json output.
def to_json(options={})
  options[:except] ||= :password
  super
end 

то же самое полезно для as_json

# Exclude password info from json output.
def as_json(options={})
  options[:except] ||= :password
  super
end

Ответ 2

Лучшее решение - переопределить методы as_json в вашей модели следующим образом:

def as_json options={}
   super(
     include: {ADD THE RELATIONS YOU WANT TO INCLUDE}).merge({YOU CAN MERGE EXTRA PARAMETER HERE})
end

Вы можете использовать только (это означает, что будут указаны только те параметры, которые вы указали) или используйте кроме (что означает возврат всех параметров, кроме перечисленных).