Rails 3.0.4中没有路由匹配

Gar*_*hey 5 routes ruby-on-rails

现在一直在盯着这个问题.这是我在尝试查看页面时遇到的错误.

No route matches {:action=>"confirm", :controller=>"locations"}
Run Code Online (Sandbox Code Playgroud)

这就是我在视图中所拥有的.

<%= form_for(@location, :url => { :action => :confirm }) do |f| %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我认为我的路线文件设置正确.

Finder::Application.routes.draw do
  resources :locations do
    member do 
      post :confirm
    end
  end

  root :to => 'locations/index'
end
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

更新:

跑rake路线,得到我认为正确的.

confirm_location POST   /locations/:id/confirm(.:format) {:action=>"confirm", :controller=>"locations"}
Run Code Online (Sandbox Code Playgroud)

cor*_*ard 5

您可以通过运行$ rake routes并查看输出来轻松调试路径.;)

认为发生的事情是你post :confirm没有注册你期望的路线.在指南中,match它的兄弟们接受一个字符串作为URL段,如下所示:

resources :locations do
  member do
    post 'confirm'
  end
end
Run Code Online (Sandbox Code Playgroud)

请注意,"confirm"现在是一个字符串而不是符号.

如果这没有帮助,请运行$ rake routes并将输出添加到您的问题中.

更新

看到你的rake输出后,我认为你只需要在你的上面指定POST方法form_for:

<%= form_for(@location, :url => { :action => :confirm }, :method => :post) do |f| %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

您还可以使用Rails定义的辅助方法使其更具可读性:

<%= form_for(@location, :url => confirm_location_path(@location), :method => :post) do |f| %>
<% end %>
Run Code Online (Sandbox Code Playgroud)