Я считаю, что это очень интересный вопрос. Я собираюсь тут вслух подумать ...
В конечном счете, перед нами стоит решение нарушить приемлемую практику шаблона проектирования для достижения определенного набора функций. Итак, мы должны спросить себя
1) Каковы возможные решения, которые не нарушают шаблон MVC
2) Каковы возможные решения, которые будут нарушать шаблон MVC
3) Какой вариант лучше? Я считаю шаблоны проектирования и стандартные практики очень важными, но в то же время, если их использование делает ваш код более сложным, то правильным решением может быть нарушение практики. Некоторые люди могут не согласиться со мной по этому поводу.
Давайте сначала рассмотрим # 1.
Вне моей головы, я бы подумал о следующих возможных решениях
А) Если вас действительно интересует, кто выполняет эти действия, должны ли эти данные каким-либо образом храниться в модели? Это сделает эту информацию доступной для вашего наблюдателя. Это также означает, что любой другой интерфейсный пользователь вашего класса ActiveRecord получает такую же функциональность.
B) Если вы на самом деле не заинтересованы в понимании того, кто создал запись, но больше заинтересованы в регистрации самих веб-действий, то вы можете рассмотреть "наблюдение" за действиями контроллера. Прошло некоторое время с тех пор, как я изучал источник Rails, поэтому я не уверен, кто их ActiveRecord :: Observer «наблюдает» за моделью, но вы можете адаптировать ее для наблюдателя контроллера. В этом смысле вы больше не наблюдаете за моделью, и имеет смысл передавать информацию о сеансе и других данных типа контроллера этому наблюдателю.
C) Самое простое решение с наименьшей «структурой» - просто отбросить код регистрации в конце методов действий, которые вы просматриваете.
Рассмотрим вариант № 2 сейчас, нарушая практики MVC.
A) Как вы предлагаете, вы могли бы найти способ, чтобы ваша модель Observer имела доступ к данным сеанса. Вы связали свою модель со своей бизнес-логикой.
Б) Не могу думать о других здесь:)
Моя личная склонность, не зная больше деталей о вашем проекте, это либо 1А, если я хочу прикрепить людей к записям, либо 1С, если есть только несколько мест, где я заинтересован в этом. Если вы действительно хотите надежное решение для ведения журналов для всех ваших контроллеров и действий, вы можете рассмотреть 1B.
Если ваш наблюдатель модели обнаружит, что данные сеанса немного "вонючие", и он, вероятно, сломается, если вы попытаетесь использовать свою модель в любом другом проекте / ситуации / контексте.