Как продезинфицировать объект, полученный с помощью own_to в рельсах 3 - PullRequest
1 голос
/ 18 декабря 2010

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

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

Когда я получаю сообщения в контроллере, я также получаю объекты User в

@message.receiver 

и

@message.sender

Эти объекты содержат некоторую пользовательскую информацию (пароли и т. Д.), Которую я хотел бы удалить, прежде чем передавать ее в представление (в моем случае это объект json). Каков наилучший способ сделать это?

Спасибо за помощь.

1 Ответ

1 голос
/ 19 декабря 2010

Если вы вручную визуализируете объекты в представлении, нет необходимости проводить санитарную обработку - ответ будет содержать только те элементы, которые вы открываете.

Если вы используете AJAX и to_json, существует несколько способов удаленияИнформация.Вы можете использовать select в исходном Model.find, чтобы убедиться, что конфиденциальная информация фактически не возвращается из запроса.См. Запросы активной записи - выбор конкретных полей для получения дополнительной информации.

Альтернативой является переопределение самого рендеринга JSON для отображения только обязательных полей, используя:

to_json(:only => [ :column, :column ])
...