Rails 4将我的一个引擎模型与另一个引擎lib模块混淆

时间:2014-08-04 16:20:58

标签: ruby-on-rails ruby ruby-on-rails-4 rspec

我有2个名为Authorization和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 - &gt;授权 - &gt;人 - &gt; 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"])

错误可能与加载路径中的优先级有关 我可能错误地定义了我的模块,但我一直在努力 想出这个。任何帮助将不胜感激!!

1 个答案:

答案 0 :(得分:0)

由于我只使用授权引擎用于它的模块,所以我决定 制作一个简单的Rails插件/ gem。我仍然希望更好地解决名称冲突 问题所以我不会关闭这个问题