【发布时间】:2019-06-16 18:26:12
【问题描述】:
我有一个控制器应该输出表单的建议。控制器位于 Admin::Shop 命名空间下,位于 app/controllers/admin/shop/suggest_controller.rb
class Admin::Shop::SuggestController < Admin::AdminsAreaController
def index
render:json => Shop::Product.all.group(:name).pluck(:name) and return
end
end
Shop::Product 是在 app/models/shop/product.rb 下定义的模型如下:
class Shop::Product < PostgresRecord
# ...
end
我可以从控制台和 rspec 测试对此模型运行查询,而不会出现任何问题。但是当我尝试从控制器内部查询时,如果文件更改(我编辑并保存)我会得到uninitialized constant Admin::Shop::SuggestController::Shop。
要让它再次工作,我必须重新启动服务器(使用 Puma)。
尝试从其他命名空间中的其他控制器查询时,我得到了相同的行为。
日志中没有任何相关内容。
我做错了什么?
【问题讨论】:
-
试试
::Shop::Product.all.group。这将导致在全局命名空间中开始持续查找。 -
你太棒了,它有效。但为什么它不能像“默认”那样工作呢?
-
可能与顶级常量查找有关,在ruby 2.5 中已更改。你在哪个版本?我的猜测是它在
Admin::Shop找到了Shop的匹配项,并且不知道如何回溯,如果找不到Admin::Shop::Product,所以它只是保释并抱怨它没有找到你的常量寻找。 -
我在 2.5.5 上,所以我想就是这样。有没有办法为这个特定的命名空间设置从顶部开始的常量查找?所以我可以避免用 :: 作为前缀,因为我在这里有 20 个模型。
-
@AndrewSchwartz - 出于好奇,是什么让您认为这是一个 ruby 而不是 rails 问题?
标签: ruby-on-rails