【发布时间】:2011-05-17 21:46:52
【问题描述】:
所以,这是我的问题。我目前正在为 Rails 站点构建一个简单的身份验证系统。为此,我有 3 个类:Person、Session 和 Role。在我的 Person 模型中,我定义了 method_missing 以根据 this guide 动态捕获角色。
在我的 application_controller 中,我有一些处理登录和注销的逻辑,其结果通过以下方式为我提供了当前登录的用户:
@user = @application_session.person
其中@application_session 是当前会话
现在在我的一个控制器中,我不希望任何人能够做任何事情,除非他们是管理员,所以我包括:
before_filter @user.is_an_admin?
这会引发NoMethodError,即使我在我的模型中定义了method_missing。我尝试定义is_an_admin?,让它始终作为测试返回true,这很有效。
根据this question,我认为问题可能与代理关联有关。当我运行时:
puts @user.proxy_owner
我得到了一个会话对象,因为每个用户(Person)可以有很多会话,并且我从当前会话中得到了我的用户(Person)。
我很困惑为什么@user.is_an_admin? 没有在我的 Person 控制器中调用 method_missing 方法。如果您需要更多信息或代码 sn-ps,请告诉我。
我在 Ruby 1.9 上使用 Rails 3
【问题讨论】:
-
@user 是如何设置的?前过滤器之前有过滤器吗?
-
是的,
@user设置在 application_controller 的 before_filter 中,而不是在 reports_controller 中调用@user.is_an_admin?。我还在该控制器的 index 方法中尝试了@user.is_an_admin?以进行调试,并收到相同的错误。
标签: ruby-on-rails ruby method-missing