セレクトボックスを変更したタイミングでサブミットを呼びたいので、下記のように記述した。
form_tagとselect_tag を使用すると、下記のHTMLが吐き出される。
<%= form_tag :controller => "index", :action => "index" do %> <%= select_tag(:area_id, options_from_collection_for_select(@areas, :id, :area_name, @area_id), \:onchange => "this.form.submit()") %> <% end %>
<form accept-charset="UTF-8" action="/area/2" method="post"> <select id="area_id" name="area_id" onchange="this.form.submit()"> <option value="1">Japan</option> <option value="2" selected="selected">Thailand</option> <option value="3">USA</option> <option value="4">Canada</option> <option value="5">England</option> </select> </form>
しかし、この方法だけだと、formの属性であるactionが、/area/2 のまま変わらない。
色々と試したが、javascriptで対応するしかないようだ。
<script type="text/javascript"> $(function(){ $('#area_id').change(function() { $("form").attr('action', '/areas/' + $(this).val()); $("form").submit(); }); }); </script>
Javascriptで、formのactionを変更してsubmitする。
もう少しスマートな方法もありそうだが、これで良しとする。