在Rails 5中动态创建控制器操作

时间:2017-11-22 21:46:25

标签: swagger ruby-on-rails-5.1

我正在尝试在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: {}> 

1 个答案:

答案 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