Ruby on rails Rails 4路由中的动态控制器
我正在创建一个rails api,并试图在我的控制器中保持模块化方法。因此,我有一些模型-Ruby on rails Rails 4路由中的动态控制器,ruby-on-rails,ruby-on-rails-4,rails-api,Ruby On Rails,Ruby On Rails 4,Rails Api,我正在创建一个rails api,并试图在我的控制器中保持模块化方法。因此,我有一些模型-组织,分支机构,用户。假设用户属于组织,而分支属于组织 在所有其他控制器扩展的基本控制器中,我希望有一个index方法,它知道如何处理几个不同的路由: 组织/1/分支机构和组织/1/用户 该索引方法将比以下方法更加有力,但这是一个想法: def index Organization.joins(params[:relation_one].to_sym).where(id: params[:organ
组织
,分支机构
,用户
。假设用户属于组织
,而分支属于组织
在所有其他控制器扩展的基本控制器中,我希望有一个index
方法,它知道如何处理几个不同的路由:
组织/1/分支机构
和组织/1/用户
该索引方法将比以下方法更加有力,但这是一个想法:
def index
Organization.joins(params[:relation_one].to_sym).where(id: params[:organization_id])
end
我的路线定义如下:
scope '/organizations' do
scope '/:organization_id' do
get '/' => 'organizations#show'
put '/' => 'organizations#update'
scope '/:relation_one' do
get '/' => ':relation_one#index'
post '/' => ':relation_one#create'
scope '/:relation_one_id' do
get '/' => ':relation_one#show'
put '/' => ':relation_one#update'
end
end
end
end
我如何创建与上面类似的动态路由,其中控制器基于url路由是动态的?类似于上述代码片段的内容应该适用于
组织/1/分支机构
和组织/1/用户
,而无需我专门定义这两个路由。这个API将有几个类似的关系,所以我现在想提出正确的方法。您可以编写一个控制器名称数组,然后在routes.rb中运行一个循环
relations = [':relation_one', ':relation_two']
scope '/organizations' do
scope '/:organization_id' do
get '/' => 'organizations#show'
put '/' => 'organizations#update'
relations.each do |rel|
scope "/#{rel}" do
get '/' => "#{rel}#index"
post '/' => "#{rel}#create"
scope "/#{rel}_id" do
get '/' => "#{rel}#show"
put '/' => "#{rel}#update"
end
end
end
end
end
您可以创建一个常量,用于在数组中存储您想要的所有控制器,然后在routes文件中进行迭代
AVAILABLE_CONTROLLERS = [:organizations, :branches, :users]
AVAILABLE_CONTROLLERS.each do |cname|
scope "/#{cname}" do
scope '/:id' do
get '/', :action => :show
put '/', :action => :update
scope '/:relation_one' do
get '/' => ':relation_one#index'
post '/' => ':relation_one#create'
scope '/:relation_one_id' do
get '/' => ':relation_one#show'
put '/' => ':relation_one#update'
end
end
end
end
end