ruby-on-rails – Ruby命名空间

我是一个非常新的ruby,来自php背景,但有些东西没有点击我.

所以,假设我有一个Ruby on Rails应用程序,我正在对我的API进行版本控制:

app
|_controllers
  |_api
  | |_v1
  | | |_application_controller.rb
  | | |_user_controller.rb
  | |_application_controller.rb
  |_application_controller.rb

具有类结构

# Versioned API V1 app controller
module Api
  module V1
    class ApplicationController
    end
  end
end

# Versioned API app controller
module Api
  class ApplicationController
  end
end

# Root app controller
class ApplicationController
end

#The code in question
module Api
  module V1
    class UserController < ApplicationController
    end
  end
end

所以问题是,ruby是否会查找Api :: V1 :: ApplicationController,Api :: ApplicationController或ApllicationController进行扩展?

<<除非我指定Api :: ApplicationController,否则ApplicationController会查找它自己的命名空间?如果是这样,我如何指定根目录?

当你使用

#The code in question
module Api
  module V1
    class UserController < ApplicationController
    end
  end
end

将在Api :: V1中搜索ApplicationControllerdefinition,如果在Api中找不到,则在根命名空间中找不到.

我同意它可能令人困惑,这就是为什么我倾向于使用绝对路径,如:: :: ApplicationController

如果我需要Api :: ApplicationController,我会编写:: Api :: ApplicationController

基本上,::告诉ruby从根命名空间开始,而不是从代码所在的位置开始.

边注

请注意,Rails开发模式中存在恶意案例.为了获得速度,加载严格的最小值.然后Rails在需要时查找类定义.

但是这有时会失败大时间的例子,当你说::用户已经加载,然后寻找:: Admin :: User. Rails不会寻找它,它会认为::用户可以做到这一点.

这可以使用代码中的require_dependency语句来解决.速度有成本:)

翻译自:https://stackoverflow.com/questions/29920216/ruby-namespacing

转载注明原文:ruby-on-rails – Ruby命名空间