在rails上使用ruby中的命名空间有什么优缺点。例如:我有很多控制器,比如
CompanyLocations
CompanyXXXX
CompanySports
CompanyActivites
CompanyQQQQQ
我想将所有这些控制器放在公司文件夹中。对此最好的做法是什么?
答案 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
并使用结构:
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#layout和ActionController#append_view_path。