使用select_tag提交表单后,没有路由匹配显示操作错误

时间:2012-06-27 15:03:06

标签: ruby-on-rails ruby-on-rails-3 forms

我的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以便修复它?

1 个答案:

答案 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。