我的Rails 3应用中的表单中有select_tag
。当我选择一个假期,并且表单已提交时,我希望转到我show
上的vacations_controller
操作。这是我的表单的代码:
<%= form_tag url_for(:controller => "vacations", :action => "show"), :method => 'get', :id => "song_selector" do %>
<%= select_tag "vacation_id", options_for_select([["Choose your vacation", ""]]+ Vacation.active.collect {|vacation| [ vacation.title, vacation.id ] } ) %>
<% end %>
然而,当我尝试时,我收到一个错误:
No route matches {:controller=>"vacations", :action=>"show"}
我肯定有这样的路线:
resources :vacations, :only => [:index, :show]
rake路线的输出:
vacation GET /vacations/:id(.:format) vacations#show
我从之前的回答中知道,我只是没有按预期在URL中传递ID。如果我提出params,看起来我的ID就像字符串一样传递:``vacations'=&gt; “2”。
所以我想知道:我如何构建我的select_tag以便修复它?
答案 0 :(得分:0)
你错过了那个动作中的id。
尝试:
<%= select_tag "id", options_for_select([["Choose your vacation", ""]]+ Vacation.active.collect {|vacation| [ vacation.title, vacation.id ] } ) %>
但这也不理想,因为网址可能会像“/ vacations /?id = X”。
另一种方法是使用javascript并根据select选项构建url,这样你就可以按照自己喜欢的方式构建url。