Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails控制器中使用错误的命名空间_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 在Rails控制器中使用错误的命名空间

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。真奇怪。有

我有一个控制器:“/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
。真奇怪。有什么问题吗?

试试:

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