Ruby on rails 在Rails中组织控制器目录(3)
我正在开发一个主要是API网关的应用程序。随着时间的推移,我们将开发多个版本的API,并考虑到向后兼容性,我希望能够实现以下几点: )) 鉴于此,我希望在每个API中都有一个自己的子路由系统。我希望控制器目录中的文件结构类似于以下内容:Ruby on rails 在Rails中组织控制器目录(3),ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我正在开发一个主要是API网关的应用程序。随着时间的推移,我们将开发多个版本的API,并考虑到向后兼容性,我希望能够实现以下几点: )) 鉴于此,我希望在每个API中都有一个自己的子路由系统。我希望控制器目录中的文件结构类似于以下内容: /app/controllers/apiv1_controller.rb /app/controllers/apiv1/module_controller.rb /app/controllers/apiv1/response_controller.rb 最终也
/app/controllers/apiv1_controller.rb
/app/controllers/apiv1/module_controller.rb
/app/controllers/apiv1/response_controller.rb
最终也有:
/app/controllers/apiv2_controller.rb
/app/controllers/apiv2/module_controller.rb
/app/controllers/apiv2/response_controller.rb
这主要是因为我不确定如何在子目录中的控制器内调用方法,例如:
return Apiv1::ResponseController.index
给我:
undefined method `index' for Apiv1::ResponseController:Class
有线索吗?此设置是否要求我手动明确“要求”必需的文件
粘贴在此处以回答问题:
routes.rb
AppName::Application.routes.draw do
resources :users
match 'api-v1/:token/:module(/:id(/:method))' => 'apiv1#route'
root :to => "welcome#index"
end
class Apiv1Controller < ApplicationController
protect_from_forgery
respond_to :json
def route
Rails.logger.level = 0
logger.info("ROUTE ACTION")
logger.info("params: #{params}")
Apiv1::ResponseController.index(params)
end
end
class Apiv1::ResponseController < ApplicationController
protect_from_forgery
respond_to :json
def index(params)
Rails.logger.level = 0
logger.info("INDEX ACTION")
result = {
'success' => true,
'controller' => 'response',
'api' => 'v1'
}
render :json => result
end
end
apiv1\u控制器.rb
AppName::Application.routes.draw do
resources :users
match 'api-v1/:token/:module(/:id(/:method))' => 'apiv1#route'
root :to => "welcome#index"
end
class Apiv1Controller < ApplicationController
protect_from_forgery
respond_to :json
def route
Rails.logger.level = 0
logger.info("ROUTE ACTION")
logger.info("params: #{params}")
Apiv1::ResponseController.index(params)
end
end
class Apiv1::ResponseController < ApplicationController
protect_from_forgery
respond_to :json
def index(params)
Rails.logger.level = 0
logger.info("INDEX ACTION")
result = {
'success' => true,
'controller' => 'response',
'api' => 'v1'
}
render :json => result
end
end
class-Apiv1Controller
apiv1/response\u controller.rb
AppName::Application.routes.draw do
resources :users
match 'api-v1/:token/:module(/:id(/:method))' => 'apiv1#route'
root :to => "welcome#index"
end
class Apiv1Controller < ApplicationController
protect_from_forgery
respond_to :json
def route
Rails.logger.level = 0
logger.info("ROUTE ACTION")
logger.info("params: #{params}")
Apiv1::ResponseController.index(params)
end
end
class Apiv1::ResponseController < ApplicationController
protect_from_forgery
respond_to :json
def index(params)
Rails.logger.level = 0
logger.info("INDEX ACTION")
result = {
'success' => true,
'controller' => 'response',
'api' => 'v1'
}
render :json => result
end
end
class Apiv1::ResponseController正确,
“控制器”=>“响应”,
“api”=>“v1”
}
render:json=>result
终止
终止
如果您想对REST API进行版本控制,可以使用gem。它还负责从另一个版本继承一个版本,这样就不会为每个版本重写相同的RESTAPI 控制器中是否定义了索引方法?我知道这似乎是一个蹩脚的问题(“你确定计算机已插入电源吗?”),但如果你不将控制器作为scaffold的一部分生成,或者如果将其作为控制器生成,则不指定操作,那么你就得不到该方法。是的,这是一个简单的方法,但我已经定义了它。(它只是做一些简单的日志记录和返回)作为另一个旁注,我尝试了调用方法和资本化的不同方法,只是有可能是这样的,还不走运。你能复制粘贴这些控制器摘录吗请/app/controllers/apiv1_controller.rb/app/controllers/apiv1/module_controller.rbf每行的前5-10行。和routes.rb。幸运的是,我们不会坚持从rails开箱即用的资源路由,所以我需要一些更灵活的东西。