在 Rails 中动态获取模型的所有路线助手列表

问题描述 投票:0回答:1

我有一堆 Rails 模型,假设其中一个叫做 Post。我需要一种方法来以编程方式提取所有路线助手及其各自针对特定模型的方法。

类似这样的事情

 Rails.application.routes.named_routes.helper_names.select do |n|
   n.include? "post"
 end  

显然行不通,因为我可以有另一个名为 OtherPost 的模型。

我想要一些类似的东西

{
  {"method": "GET", "helper": "post_path", "action": "show"},
  {"method": "POST", "helper": "edit_post_path", "action": "update"},
  {"method": "GET", "helper": "posts_path", "action": "index"},
  ...
}

我知道操作和方法位于

Rails.application.routes.routes
->
route.verb
route.defaults[:action]
中,但我似乎无法可靠地将它们与助手名称联系起来。

ruby-on-rails ruby
1个回答
0
投票

这是你想要的吗?

def extract_routes_for_model(model_name)
  Rails.application.routes.routes.map do |route|
    verb = route.verb.match(/[A-Z]+/).to_s
    path = route.path.spec.to_s
    controller_action = route.defaults[:controller]
    action = route.defaults[:action]
    helper = Rails.application.routes.url_helpers.method_defined?("#{route.name}_path") ? "#{route.name}_path" : nil

    if controller_action&.include?(model_name.underscore.pluralize)
      {
        method: verb,
        path: path,
        helper: helper,
        action: action
      }
    end
  end.compact
end

使用:extract_routes_for_model("Post")

输出将是一个哈希数组,其中包含每个相应路径的信息。

© www.soinside.com 2019 - 2024. All rights reserved.