Всегда ли создание ассоциации ActiveRecord извлекает объекты из базы данных? - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть такой код:

u = ... some user ...
u.clubs << Club.new(:name => "Stu's house of Disco")

С моделью соединения, ClubMemberships, который создается автоматически с помощью вышеупомянутого.

Пока все хорошо.Однако у пользователей есть атрибут, который хранится в памяти , а не в базе данных, из соображений безопасности, и при запуске метода «<<» он <strong>перезагружает пользователя из базы данных.и, таким образом, взрывает некоторый код в ClubMemberships # after_create, который зависит от того, не поврежден ли пользователь секретным кольцом декодера, которого у него нет при свежей загрузке из базы данных.Это кажется немного странным: почему он загружает пользователя, когда у нас там сидит очень хороший пользователь?Что еще более важно, есть ли способ обойти это, или нам придется просто создать наш собственный метод add_club для пользователя?

1 Ответ

0 голосов
/ 10 декабря 2011

Вот что мы сделали.Это уродливый хак, и приветствуются превосходные решения.

Мы создали переменную класса @@ secret_decoder_ring в User с хешем, связывающим идентификатор объекта и секретную информацию, не связанную с БД, так что еслирассматриваемый объект был просмотрен и заполненные секретные данные были видны в будущем.

На самом деле мы хотим, чтобы видимость была только продолжительностью запроса, обработанного в Rails, поэтому мы имеемafter_filter, который стирает данные.

Уродливо?Да, но пока что делает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...