Как переопределить метод "as json" или "to json", чтобы "ответить" без включения указанной информации?
Я использую 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
можно использовать только (это означает, что единственными параметрами, которые вы перечислили, будут return) или use за исключением (что означает возврат всех параметров, кроме перечисленных).