所以,这是我的问题。我目前正在为 Rails 站点构建一个简单的身份验证系统。为此,我有 3 个类:Person、Session 和 Role。在我的 Person 模型中,我已经定义method_missing
为根据本指南动态捕获角色。
在我的 application_controller 中,我有一些逻辑来处理登录和注销,其结果通过以下方式为我提供了当前登录的用户:
当前会话@user = @application_session.person
在哪里@application_session
现在在我的一个控制器中,我不希望任何人能够做任何事情,除非他们是管理员,所以我包括:
before_filter @user.is_an_admin?
NoMethodError
即使我method_missing
在我的模型中定义了,这也会引发 a 。我尝试定义is_an_admin?
,让它总是作为测试返回 true ,这很有效。
根据this question,我认为问题可能与代理关联有关。当我运行时:
puts @user.proxy_owner
我得到一个会话对象,因为每个用户(Person)可以有很多会话,并且我从当前会话中获取了我的用户(Person)。
我很困惑为什么@user.is_an_admin?
不在我的 Person 控制器中调用 method_missing 方法。如果您需要更多信息或代码片段,请告诉我。
我在 Ruby 1.9 上使用 Rails 3