Как переопределить метод "as_json" или "to_json" для того, чтобы "response_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
}
но это мне нужно рефакторинг.
2 ответа
Если это только в одном действии, вы можете попробовать:
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
Лучшее решение - переопределить методы as_json в вашей модели следующим образом:
def as_json options={}
super(
include: {ADD THE RELATIONS YOU WANT TO INCLUDE}).merge({YOU CAN MERGE EXTRA PARAMETER HERE})
end
Вы можете использовать только (что означает, что будут возвращены только те параметры, которые вы перечислили) или использовать, кроме (что означает, что возвращаются все параметры, кроме перечисленных).