Ruby on rails 在Rails控制器中使用错误的命名空间
我有一个控制器:“/app/controllers/analyst/test\u orders\u controller.rb” 在此文件中,我有:Ruby on rails 在Rails控制器中使用错误的命名空间,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个控制器:“/app/controllers/analyst/test\u orders\u controller.rb” 在此文件中,我有: class Analyst::TestOrdersController < ApplicationController def new @order = Order.new end end 但是我不想使用Analyst::TestOrdersController::Order.new,我只想使用Order.new。真奇怪。有
class Analyst::TestOrdersController < ApplicationController
def new
@order = Order.new
end
end
但是我不想使用Analyst::TestOrdersController::Order.new
,我只想使用Order.new
。真奇怪。有什么问题吗?试试:
module Analyst
class TestOrdersController < ApplicationController
def new
@order = Order.new
end
end
end
模块分析员
类TestOrdersController
我认为这与模块嵌套有关:
使用
::订单。新建
解释器正在Analyst
模块名称空间下查找订单的定义,这是因为应用程序模型是延迟加载的,因此尚未读取文件models/Order.rb。添加通用名称空间会告诉它在Rails路径中搜索定义
确认这一点的方法是在订单模型主体中添加一些随机函数调用,并查看它是否不会执行,除非您显式调用::Order。您的Order
类是否可以从rails控制台
访问?尝试使用@Order=::Order.new
@Marek\u Lipka,当然可以。我有大约30个控制器使用这个类。@dax,我知道这个解决方案,但我认为它只是一个黑客。这种奇怪的行为是怎么回事?使用::Order.new
实际上解决了您的问题?
module Analyst
class TestOrdersController < ApplicationController
def new
@order = Order.new
end
end
end