Rails 6、如何使用路由参数作为控制器方法名?

In Rails 6, how can I use a route parameter as the controller method name?

我有一个包含多个操作的报表控制器,每个操作对应一种报表。

我本来打算让他们走这样的路线:

/报告/:report_type

我希望将 report_type 字符串片段用作控制器名称,这样我就可以使用一个路由来处理所有这些片段,如下所示:

  get 'reports/:rpt_type' => "reports#:rpt_type"

...这将解决这个问题,例如:

  get 'reports/song_performers' => 'reports#song_performers'

这可能吗?如果可能,怎么做?

是的,是的。您可以在控制器中处理此问题,而不是 routes.rb 文件:

# reports_controller.rb
def show
  send(params[:rpt_type])
end

private
def song_performers
  # do stuff
end

def other_type
  # do other stuff
end

# in routes.rb
get 'reports/:rpt_type', to: 'reports#show'