【问题标题】:Rails Controller NamespaceRails 控制器命名空间
【发布时间】:2014-05-19 17:58:50
【问题描述】:

在 ruby​​ on rails 中使用命名空间有哪些优点和缺点。例如:我有很多控制器,比如

CompanyLocations 
CompanyXXXX 
CompanySports 
CompanyActivites
CompanyQQQQQ

我想将所有这些控制器放在公司文件夹中。 Rails 的最佳实践是什么?

【问题讨论】:

  • 您的应用程序的更广泛的上下文是什么?还有多少其他与公司无关的表?这些案例中的每一个是否真的需要以“公司”为前缀?或者当您考虑整个应用程序时,是否隐含了“公司”?
  • 它是一个大规模的应用程序。出于某种原因,我需要在许多控制器中保留公司作为前缀。问题不特定于任何应用程序。如果我们将所有类似的控制器放在大型应用程序的一个文件夹中,我只想知道最佳实践和缺点。

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2


【解决方案1】:

你必须在你的 controller/ 目录中创建一个子文件夹,在你的 views/ 目录中也是如此。

你的控制器文件应该是这样的

module Company
 class SportsController < ApplicationController

 def index
 end

 end
end

...或

class Company::SportsController < ApplicationController

 def index
 end

end

你也可以这样调用你的部分

render :template => "company/sports/index"

然后在 routes.rb 中

namespace :company do
 resources :sports
end

【讨论】:

  • 谢谢大家。大规模应用有什么缺点或并发症吗?
  • 没问题,只使用名称范围很好,但要小心调用API和路由和视图
  • 你能解释一下这两个例子有什么区别吗?为什么是两个?
  • 两种方式都可以定义命名空间,两者都是一样的,只是语法有变化。
  • 请记住,在您的示例中,您将无法在根级别定义 Company
【解决方案2】:

只需将控制器拉入文件夹即可。
创建文件夹app/controllers/company

并创建一个具有结构的控制器locations_controller.rb

module Company
  class LocationsController < ApplicationController
    layout '/path/to/layout'
    append_view_path 'app/views/path/to/views'

    def index
    end

  end
end

routes.rb 中使用scope :module

scope module: 'company' do
  get '/locations', to: 'locations#index' # this route in scope
end

这会生成路线:

locations_path   GET     /locations(.:format)    company/locations#index

更新:

只是提示。 对于视图和布局,您可以使用: ActionController#layoutActionController#append_view_path

【讨论】:

  • 对不起,不是指的问题,是关于字体文本的来源想知道它是什么。对不起,我的英语说或写得不好
  • @WilyAO 那是SourceCode Pro 字体,我不记得ExtraLightLightRegular
猜你喜欢
  • 2023-03-11
  • 2012-07-08
  • 2012-03-07
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 2011-09-19
相关资源
最近更新 更多