Итак, вот моя проблема.В настоящее время я создаю простую систему аутентификации для сайта rails.У меня есть 3 класса для этого: человек, сессия и роль.В моей модели Person я определил method_missing
для динамического захвата ролей в соответствии с этим руководством .
В моем application_controller у меня есть некоторая логика для работы с входами и выходами из системы, результатомкоторый дает мне зарегистрированного пользователя через: @user = @application_session.person
Где @application_session
- текущий сеанс
Теперь на одном из моих контроллеров я не хочу, чтобы кто-либо мог что-либо делать, если он неadmin, поэтому я включил: before_filter @user.is_an_admin?
Это поднимает NoMethodError
, хотя в моей модели определено method_missing
.Я попытался определить is_an_admin?
, заставить его всегда возвращать true в качестве теста, и это работает.
Согласно этот вопрос , я думаю, что проблема может иметь какое-то отношение к ассоциациям прокси.Когда я запускаю: puts @user.proxy_owner
, я получаю объект сеанса, поскольку каждый пользователь (Person) может иметь много сеансов, и я получил своего пользователя (Person) из текущего сеанса.
Я очень смущен, почему @user.is_an_admin?
не вызывает метод method_missing в моем контроллере Person.Пожалуйста, дайте мне знать, если вам нужна дополнительная информация или фрагменты кода.
Я использую Rails 3 на Ruby 1.9