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'
我有一个包含多个操作的报表控制器,每个操作对应一种报表。
我本来打算让他们走这样的路线:
/报告/: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'