Ruby on rails 我是否应该在命名空间控制器中显式定义模块?
我在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 但是,声明之间的区别在于,在第一个代码段中,词法范围
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