首页 > 解决方案 > Ruby on Rails 中的版本控制 API 助手

问题描述

我们有一个版本化的 API,它遵循 Rails API 版本化的所有约定。IE

module API::V4
  class Test < ApiController
  end
end

但是有没有合适的方法来版本助手?当前的 helpers 目录看起来像这样:

app
|__helpers
   |__helper_a.rb
   |__helper_b.rb

并且所有助手都是已定义的模块。

有没有办法做到这一点?

module Helpers::V2
  class HelperA
  end
end

我尝试创建一个目录app/helpers/v2/helper_a.rb,添加app/helpers/helpers.rb和定义module Helpers但由于某种原因 rails 总是看不到Helpers::V2::HelperA

标签: ruby-on-railsrubyapi

解决方案


Railsapp从子目录开始搜索每个子目录。不app/models/foo/bar.rb包含。包含,不是。Foo::BarModels::Foo::Barapp/controllers/api/v4/test.rbApi::V4::TestControllers::Api::V4::Test

所以app/helpers/v2/helper_a.rb包含V2::HelperA.

module V2
  module HelperA
  end
end

如果您想将帮助程序版本与您的 API 版本相关联,那么镜像目录结构是有意义的。

# app/helpers/api/v2/helper_a.rb

# A helper for API v2.
module Api
  module V2
    module HelperA
    end
  end
end

请注意,它Api遵循 Rails 约定。自动加载器将映射app/helpers/api/v2/helper_a.rbApi::V2::HelperA. 它可能适用于 Rails 5 自动加载器,但不适用于 Rails 6 自动加载器。

如果我们使用API::V2::HelperA...

[1] pry(main)> API::V2::HelperA
NameError: uninitialized constant API
Did you mean?  Api

推荐阅读