Как переопределить метод "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
Вы можете использовать только (это означает, что будут указаны только те параметры, которые вы указали) или используйте кроме (что означает возврат всех параметров, кроме перечисленных).