【发布时间】:2014-08-04 16:20:58
【问题描述】:
我有 2 个名为 Authorization 和 People 的可挂载引擎。 People 有一个名为 User 的模型,而 Authorization 有一个嵌套模块 Authorization::People::User,我只用于它的模块功能。
如果 Rails 将 Authorization 的 People::User 与 People 引擎中的 User 模型混淆,那么问题就来了。
当我启动服务器并访问路径时,它抱怨没有构造函数,当我使用 RSpec 时进一步说明了这一点,它抱怨没有新方法。当我将授权中的 user.rb 重命名为不冲突的名称时,问题就消失了。我认为这不应该发生的原因是因为外部模块 Authorization 应该防止任何名称冲突。
在授权引擎的engine.rb文件中,我将lib目录放入加载路径中
lib -> authorization -> engine.rb
module Authorization
class Engine < ::Rails::Engine
isolate_namespace Authorization
config.autoload_paths += Dir["#{config.root}/lib/**/"]
end
end
这是我创建的用于处理授权的模块 lib -> 授权 -> 人 -> user.rb
module Authorization
module People
module User
#If any of these methods returns true there is an error
def self.auth_user(editingUser,tokenUser)
if editingUser != tokenUser
#Can only edit your own data
return true
else
return false
end
end
end
end
end
这就是我在用户引擎内部调用授权的方式
::Authorization::People::User.auth_user(@user,@instance_hash["current_user"])
错误可能与加载路径中的优先级有关,或者 我可能错误地定义了我的模块,但我一直在绞尽脑汁尝试 弄清楚这一点。任何帮助将不胜感激!
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 rspec