ruby-on-rails - 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
解决方案
Railsapp
从子目录开始搜索每个子目录。不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 约定。自动加载器将映射app/helpers/api/v2/helper_a.rb
到Api::V2::HelperA
. 它可能适用于 Rails 5 自动加载器,但不适用于 Rails 6 自动加载器。
如果我们使用API::V2::HelperA
...
[1] pry(main)> API::V2::HelperA
NameError: uninitialized constant API
Did you mean? Api
推荐阅读
- python-2.7 - 在python的单元测试中模拟打开文件?
- python - 迭代重新加权最小二乘
- php - Opencart 3 在标题中禁用日期
- c - 命令行参数上的 atoi 函数
- ios - Swift 如何在播放暂停后保持锁定屏幕音频控件可用
- spring-boot - 创建 Spring Starter 项目时 POM 文件出错
- javascript - 使用 React 钩子 useEffect 进行链式 API 调用
- mysql - 如何从存储在一列中的 json 中获取前 5 个值?
- c - 装配移动指令似乎没用
- windows - Powershell 脚本独立运行,但在作为可执行文件运行时出现“方法调用失败”错误