Как продезинфицировать объект, полученный с помощью ineors_to в рельсах 3
-
11-10-2019 - |
Вопрос
У меня есть два класса: пользователь и сообщение. Ниже приведены определения:
class Message < ActiveRecord::Base belongs_to :receiver, :class_name => 'User', :foreign_key => 'receiver' belongs_to :sender, :class_name => 'User', :foreign_key => 'sender' end class User < ActiveRecord::Base has_many :incoming_messages, :class_name => 'Message', :foreign_key => 'receiver' has_many :outgoing_messages, :class_name => 'Message', :foreign_key => 'sender' end
Когда я получаю сообщения в контроллере, я также получаю объекты пользователя в
@message.receiver
а также
@message.sender
Эти объекты содержат некоторую информацию пользователя (пароли и т. Д.), Которые я хотел бы удалить, прежде чем передавать ее в представление (объект JSON в моем случае). Как лучше всего это сделать?
Спасибо за помощь.
Решение
Если вы вручную рендерируете объекты в представлении, нет необходимости дезинфицировать - ответ будет содержать только элементы, которые вы обнажаете.
Если вы используете AJAX и TO_JSON, есть несколько способов удаления информации. Вы можете использовать Select в начальной модели. Наблюдайте, чтобы убедиться, что информация о Senstive фактически не возвращается из запроса. Видеть Активные запросы записи - выбор конкретных полей для большего.
Альтернатива состоит в том, чтобы переопределить рендеринг JSON, чтобы отобразить только необходимые поля, используя:
to_json(:only => [ :column, :column ])