Rails: элегантный способ получить user_agent в обратном вызове до / после? - PullRequest
1 голос
/ 29 марта 2012

У меня есть :after_update обратный вызов, который записывает изменения в одну из моих моделей.

Мне интересно, есть ли элегантный способ получить user_agent в этом обратном вызове, когда редактирование пришло из сети?request.

Я знаю, что это в модели, которая не имеет доступа к объекту запроса.И это не нужно редактировать из веб-запроса.Например, если редактировать с консоли, было бы хорошо, если бы user_agent был nil в этом случае.

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

Может быть, есть умный способ поместить attr_acessor в модель под названием user_agent (не сохраняетсяв базе данных) и убедитесь, что каждое действие контроллера заполняет это при редактировании?Но не уверен.

Спасибо!

1 Ответ

1 голос
/ 29 марта 2012

Elegant Я не уверен, но я верю, что Rails будет использовать 1 поток на запрос (порождает его для обработки), так что вы можете сделать

Thread.current[:my_user_agent] = request.user_agent

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

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