Rails 3 наблюдатели и current_user - PullRequest
4 голосов
/ 20 января 2012

В Stackoverflow есть несколько схожих вопросов по поводу получения current_user из Rails 3 наблюдателей, но основные идеи те же:

1) передача current_user через

attr_accessor :current_user

в модели, которую мы должны наблюдать.

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

2) Сохранение текущего пользователя в теме. Совершенно неприемлемо.

Так, какова лучшая практика? И, скажем, я хочу получить в моем обозревателе не только current_user, но и IP-адрес?

Есть идеи?

Ответы [ 2 ]

1 голос
/ 24 января 2012

Проведя дополнительные исследования, я обнаружил, что в таких задачах совершенно бесполезно использовать собственных наблюдателей Rails.Потому что, если вам нужно передать что-то из контроллеров, в моем случае это был current_user, это полностью разрушает красоту наблюдателя.

Так что мой ответ на мой собственный вопрос: все еще застрял с чем-то вроде acts_as_audited

0 голосов
/ 21 января 2012

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

Затем ваш код вида / контроллера поместит текущего пользователя в это поле.

Это кажетсядля меня, чтобы быть самым безопасным подходом.Я бы беспокоился о том, чтобы наблюдатель использовал текущего пользователя - мне кажется, что текущий пользователь должен быть отделен от квази-фоновой обработки, которую выполняет наблюдатель.(Именно поэтому сохранение текущего пользователя в потоке - который я использовал в прошлом с большим успехом - и здесь кажется неправильным).

Этот подход (наличие last_modified_by также позволяет вам вносить изменения в записи вbatch - возможно, отправка электронной почты владельцу записи: «Система обновила вашу запись, потому что (произошла некоторая ежедневная процедура обработки). last_modified_by некоторый созданный пользователь, который представляет систему (или пользователь-администратор).

...