Как переопределить метод «as_json» или «to_json», чтобы «response_to» без включения указанной информации? - PullRequest
10 голосов
/ 04 марта 2011

Я использую 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
}

но это мне нужно рефакторинг .

Ответы [ 2 ]

13 голосов
/ 04 марта 2011

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

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
0 голосов
/ 22 февраля 2017

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...