繁体   English   中英

在 Rails 上的 Ruby 中对 API 助手进行版本控制

[英]Versioning API Helpers in Ruby on Rails

我们有一个版本化的 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

Rails 从子目录开始搜索app的每个子目录。 app/models/foo/bar.rb包含Foo::Bar而不是Models::Foo::Bar app/controllers/api/v4/test.rb包含Api::V4::Test ,而不是Controllers::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 约定。 自动加载器将 map 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM