我正在尝试在Rails 5.1.4 api中设置动态路由。最初,我的所有动态路线都指向一个动作,效果很好。当我尝试使用swagger-docs gem时出现问题,这需要为每个条目单独执行一个操作,以便为swagger ui生成必要的json。所以,我想我可以简单地动态创建方法并指向它们的路线。据我所知,方法没有被创建,我不明白为什么。即使我将调试器放入循环遍历我的部分的循环中,它也永远不会被触发。我非常感谢你提供任何帮助。
的routes.rb
Section.active.all.each do |section|
get "/#{section.url}", :to => "sections##{section.url}", defaults: { id: section.id }
end
sections_controller.rb
class SectionsController < ApplicationController
Section.active.all do |section|
define_method :"#{section.url}" do
#some things
end
end
end
development.rb
config.eager_load = true
如果我打电话:
SectionsController.action_methods
=> #<Set: {}>
答案 0 :(得分:0)
我最终只是将section_url作为一个参数,将所有内容指向show动作并在文档描述中添加可能的部分URL。
的routes.rb
get "/:section_url", to: "sections#show"
#must be at the end of the routes definitions
sections_controller.rb
swagger_api :show do
summary "Returns Section Items"
param :path, :section_url, :string, :required, Section.active.pluck(:url).join(", ")
response :ok
response :not_found
end