我目前有一个表格(使用 form_tag)。其中一个字段是选项的下拉列表。每个选项值都与我的控制器中的方法名称匹配。我想要做的是当点击表单提交按钮时,它运行直接对应于下拉字段中选择的值的控制器方法。
我现在已经建立了一个解决方法,但感觉太冗长了:
def run_reports
case params[:report_name]
when 'method_1' then method_1
when 'method_2' then method_2
when 'method_3' then method_3
when 'method_4' then method_4
else method_1
end
# each method matches a method already defined in the controller
# (i.e. method_1 is an existing method)
我曾认为使用下拉选项值通过 form_tag 操作(即:action => params[:report_name])在我的控制器中运行相应的方法可能会起作用,但这不起作用,因为表单中的操作需要在设置参数值之前设置。我不想为这个功能使用 javascript。
这是我的表格:
<%= form_tag("../reports/run_reports", :method => "get") do %>
<%= select_tag :report_name, options_for_select([['-- Please Select --',nil],['Option 1','method_1'], ['Option 2','method_2'], ['Option 3','method_3'], ['Option 4','method_4']]) %>
<%= submit_tag "Run Report" %>
<% end %>
有什么建议么?
我可以改变我的控制器方法看起来像这样 - 但实际上调用控制器方法来运行?我猜这不会运行,因为参数值作为字符串返回......
def run_reports
params[:report_name]
end