gpt4 book ai didi

ruby-on-rails - 使用嵌套在模块中的关注点

转载 作者:数据小太阳 更新时间:2023-10-29 09:00:42 24 4
gpt4 key购买 nike

我们有一个问题要用作我们的用户类的混合。我们在用于多种产品的单独 Rails 引擎中发现了这种担忧。

这个引擎中的所有内容,我们都保存在同一个模块中,我们称之为 MyEngine。

module MyEngine
module EngineUser
extend ActiveSupport::Concern
end
end

我们正尝试将它像任何其他问题一样包含在我们的 Rails 应用程序中:

class User < ActiveRecord::Base
include MyEngine::EngineUser
# ...
end

这会导致错误:(为了便于阅读而格式化)

/Users/foo/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:495:in `load_missing_constant':

Unable to autoload constant EngineUser, expected /Users/foo/Perforce/engine_folder/app/models/concerns/engine_user.rb to define it

哪个.....是正确的文件...<.<

如果我删除类周围的 module MyEngine,并在 User 中形成 include,它就可以正常工作。

我知道 Rails 会在幕后自动加载,但为什么它不起作用?它知道该文件具有类...如果我将其移至 engine/app/concerns,它会说无法在那里找到它。太令人沮丧了。

最佳答案

这应该可以解决您的问题。我最近遇到了同样的问题..

看看我添加的附加模块 Concerns

module MyEngine
module Concerns
module EngineUser
extend ActiveSupport::Concern
end
end
end

# lib/my_engine/engine.rb
module MyEngine
class Engine < ::Rails::Engine
config.autoload_paths += %W(#{MyEngine::Engine.root}/app/models/my_engine/concerns/engine_user.rb)
isolate_namespace MyEngine
end
end

# app/models/user.rb
class User < ActiveRecord::Base
include MyEngine::Concerns::EngineUser
# ...
end

这是 RailsGuide使我找到答案的帖子。

关于ruby-on-rails - 使用嵌套在模块中的关注点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36271212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com