我的理解是Rails默认情况下可以自动加载以app
文件夹命名的类。
但我遇到了问题,发现无法自动加载,因此想看看您是否能找出代码中明显的问题。
我的文件夹/文件:
app
blueprints
concerns
ingredient_blueprint_concern.rb
liqueur_blueprint.rb
controllers
models
...
#app/blueprints/concerns/ingredient_blueprint_concern.rb
module Concerns
module IngredientBlueprintConcern
extend ActiveSupport::Concern
included do
attributes :name
end
end
end
# app/blueprints/liqueur_blueprint.rb
class LiqueurBlueprint < BaseBlueprint
include ::Concerns::IngredientBlueprintConcern
# ...
end
rails 控制台:
> Concerns
=> NameError (uninitialized constant Concerns
Did you mean? Concurrent):
这似乎与新的 Rails 6 Zeitwerk 模式有关。如果我回到 classic 模式(使用下面的代码),它似乎可以正常工作:
# application.rb
config.autoloader = :classic
foo
文件夹也完全相同。 - Robinmodels/concerns
中,你不必为它们命名空间。现在这些concerns文件夹在自动加载路径中,所以你不需要命名空间。 - Robin