Есть ли готовый способ всегда скрывать/удалять столбец (скажем, User.password) при возврате объекта ActiveRecord? Спасибо.
ActiveRecord: скрыть столбец при возврате объекта
Ответ 1
Используя встроенную сериализацию, вы можете переопределить метод as_json
на вашей модели, чтобы передать дополнительные параметры по умолчанию:
class User < ActiveRecord::Base
# ...
def as_json(options = {})
super(options.merge({ except: [:password, :oauth_token] }))
end
end
Есть, вероятно, лучшие инструменты для сериализации - если вы ищете более мелкозернистый контроль, я бы рекомендовал проверить active_model_serializers
или rabl
.
Ответ 2
Вы попали на эту страницу, потому что пытаетесь скрыть пароли обычного текста?
STOP! вы делаете это неправильно.
ошибка http://e-abaco.net/wp-content/uploads/2009/06/bug-feature.jpg
Вы не должны никогда не хранить пароли в виде обычного текста.
Скорее всего, ваш сервер имеет или будет иметь какой-то недостаток, а хакеры получат ваши пароли клиентов. Подумайте немного:
- Что вы им скажете?
- Как они будут реагировать?
- Каковы результаты для вашего бизнеса?
Поскольку вы теперь новый человек и ищете правильный способ хранения паролей, вы можете прочитать эту хорошую статью
p >Ответ 3
Вы можете скрыть определенный атрибут во время сериализации с помощью :except
:
render json: @users, except: [:password, :other]
В качестве альтернативы вы можете использовать after_initialize
для этого и перенести данные в несериализованный атрибут:
class User < ActiveRecord::Base
attr_accessor :hidden_password, :hidden_other
after_initialize :hide_columns
def hide_columns
[:password, :other].each do |c|
send("hidden_#{c}=", send(c))
send("#{c}=", nil)
end
end
end