Как продезинфицировать объект, полученный с помощью ineors_to в рельсах 3

StackOverflow https://stackoverflow.com/questions/4479735

Вопрос

У меня есть два класса: пользователь и сообщение. Ниже приведены определения:

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 ])
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top