包含在Rails控制器

时间:2016-07-02 23:58:22

标签: ruby-on-rails ruby module

考虑我有一个位于/lib/foo/bar/baz.rb的课程,定义如下:

module Foo
  module Bar
    class Baz
      def initialize
        self.name = 'Baz'
      end
    end
  end
end

我还有以下控制器/controllers/my_controller.rb,定义如下:

class MyController < ApplicationController
  def index
    render json: ::Foo::Bar::Baz.new
  end
end

按照预期输出JSON {name: "Baz"}

问题是如果我尝试包含Foo::Bar模块,那么每次我想使用它时,我都不必将它添加到Baz类名:

class MyController < ApplicationController
  include ::Foo::Bar

  def index
    render json: ::Baz.new
  end
end

返回以下错误消息:uninitialized constant Baz

为什么???

2 个答案:

答案 0 :(得分:0)

我想你应该试试

include ::Foo::Bar
...
render json: Baz.new

答案 1 :(得分:0)

::Baz确保在顶级命名空间中找到模块Baz,因此您不应使用此语法。 render json: Baz.new应该有用。