Rails控制器命名空间

时间:2014-04-07 13:05:25

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

在rails上使用ruby中的命名空间有什么优缺点。例如:我有很多控制器,比如

CompanyLocations 
CompanyXXXX 
CompanySports 
CompanyActivites
CompanyQQQQQ

我想将所有这些控制器放在公司文件夹中。对此最好的做法是什么?

2 个答案:

答案 0 :(得分:36)

您必须在控制器/目录中创建一个子文件夹,并在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

答案 1 :(得分:24)

只需将控制器拉入文件夹即可。
创建文件夹app/controllers/company
enter image description here
并使用结构:

创建一个控制器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