私は現在フォームを持っています(form_tagを使用)。フィールドの1つは、オプションのドロップダウンリストです。各オプション値は、コントローラーのメソッドの名前と一致します。フォーム送信ボタンをクリックすると、ドロップダウンフィールドで選択した値に直接対応するコントローラーメソッドが実行されます。
現在、回避策を作成しましたが、冗長すぎると感じています。
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])を介してコントローラーで対応するメソッドを実行することは機能する可能性があると思っていましたが、フォーム内のアクションのため、これは機能しません。 params値を設定する前に設定する必要があります。この機能に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 %>
助言がありますか?
コントローラメソッドを次のように変更できますが、実際にコントローラメソッドを呼び出して実行することはできますか?params値が文字列として返されるため、これは実行されないと思います...
def run_reports
params[:report_name]
end