我正在尝试做类似Railscasts #255的事情,但我收到了No Route错误:
在Ryan的routes.rb
档案中:
post "versions/:id/revert" => "versions#revert", :as => "revert_version"
在他使用路线的控制器中versions_controller.rb
link = view_context.link_to(link_name, revert_version_path(@version.next, :redo => !params[:redo]), :method => :post)
redirect_to :back, :notice => "Undid #{@version.event}. #{link}"
在我的routes.rb
post "/approve/:id" => "listings#approve", :as => "listing_approve"
并查看我使用链接的位置:
<%= link_to 'Approve Content', listing_approve_path(@listing), :method => :post %>
我的测试给我一个ActionController::RoutingError: No route matches [GET] "/approve/1"
如果我将方法保留为GET,一切正常..使用rails 3.1.0rc5。任何有关我在这里做错的指导都将非常感谢..
编辑:routes.rb文件(最后一行设置为match
现在正常工作)
RLR::Application.routes.draw do
root :to => "home#index"
devise_for :users, :controllers => { :registrations => "registrations" }
devise_for :users
match '/user' => "layouts#index", :as => :user_root
resources :users, :only => :show
resources :layouts, :only => [:index, :show]
resources :listings
resources :features
resources :orders
match "/preview/:id" => "listings#preview", :as => "listing_preview", :via => "get"
match "/approve/:id" => "listings#approve", :as => "listing_approve"
end
答案 0 :(得分:1)
您可以通过将其更改为提交隐藏表单的按钮来解决此问题,但这可能不是您想要的直观表示。
答案 1 :(得分:0)
这可能是优先事项 - 使用routes.rb中的第一个匹配路由定义,因此如果您有资源路由或类似的东西,它可能首先匹配。
答案 2 :(得分:0)
我在我的rails应用程序中遇到了同样的问题,我通过做一个via来解决它问题:得到匹配而不是via :: post。我认为,出于某种原因,当您以/ something /:id格式发送请求时,它将自动承担其[GET]请求并搜索获取路由。这当然会导致您的路线出现问题,如果您将其作为:POST。
如果有人有更好的解决方案或想法,为什么你不能以'/ something /:id'格式发送帖子请求,请告诉我。