Ruby on rails 我是否应该在命名空间控制器中显式定义模块?

Ruby on rails 我是否应该在命名空间控制器中显式定义模块?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在Rails教程中看到过这样的代码示例: module Api class UsersController # ... end end 就像这样: class Api::UsersController # ... end 尽管RubyMine IDE警告我第二个示例中没有定义模块,但这两个代码示例似乎都工作正常。你们能解释一下吗?多亏了一堆这两个代码片段都将声明一个模块Api,其中包含UsersController 但是,声明之间的区别在于,在第一个代码段中,词法范围

我在Rails教程中看到过这样的代码示例:

module Api
  class UsersController
    # ... 
  end
end
就像这样:

class Api::UsersController
  # ...
end

尽管RubyMine IDE警告我第二个示例中没有定义模块,但这两个代码示例似乎都工作正常。你们能解释一下吗?多亏了一堆

这两个代码片段都将声明一个模块Api,其中包含UsersController

但是,声明之间的区别在于,在第一个代码段中,词法范围设置为Api模块。假设您有一个类
Api::User
。在第一个代码段中,您可以省略模块:

module Api
  class UsersController
    def action
      @user = User.first # #<Api::User>
    end
  end
end
模块Api
类UsersController
def动作

@user=user.first###,它描述了相同的问题。

我对RubyMine了解不多,但这些类声明是等价的,对吧。
class Api::UsersController
  def action
    @user = User.first # #<NameError: uninitialized constant User>
  end
end