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

时间:2014-12-09 14:45:04

标签: ruby-on-rails ruby

我有一个控制器:" /app/controllers/analyst/test_orders_controller.rb"。

在这个文件中我有:

class Analyst::TestOrdersController < ApplicationController
  def new
    @order = Order.new
  end
end

但我有一个错误:

uninitialized constant Analyst::TestOrdersController::Order

但我不想使用Analyst::TestOrdersController::Order.new,我只想使用Order.new。它很奇怪。有什么问题?

2 个答案:

答案 0 :(得分:3)

使用::Order.new 解释器在Analyst模块名称空间下查找Order的定义,这是因为应用程序模型被懒惰加载,因此尚未读取文件models / order.rb。添加通用命名空间会告诉它在Rails路径中搜索定义。

确认这一点的方法是在Order模型体中添加一些随机函数调用,看看除非你明确调用:: Order,否则它不会被执行。

答案 1 :(得分:0)

尝试:

module  Analyst
  class TestOrdersController < ApplicationController
    def new
      @order = Order.new
    end
  end
end

我认为它与模块嵌套有关: https://cirw.in/blog/constant-lookup