Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中组织控制器目录(3)_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 在Rails中组织控制器目录(3)

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 最终也

我正在开发一个主要是API网关的应用程序。随着时间的推移,我们将开发多个版本的API,并考虑到向后兼容性,我希望能够实现以下几点:

))

鉴于此,我希望在每个API中都有一个自己的子路由系统。我希望控制器目录中的文件结构类似于以下内容:

/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开箱即用的资源路由,所以我需要一些更灵活的东西。