代码之家  ›  专栏  ›  技术社区  ›  Neil Middleton

有效路由上的轨道路由错误

  •  0
  • Neil Middleton  · 技术社区  · 15 年前

    我的路由文件中包含以下内容:

    resources :timelogs do
      member do
        post :stop
      end
      collection do
        get :start
      end
    end
    

    在“rake routes”上产生以下结果:

    rake routes | grep stop
    stop_timelog POST   /timelogs/:id/stop(.:format)       {:action=>"stop", :controller=>"timelogs"}
    

    Started POST "/timelogs/325/stop" for 188.220.17.64 at Wed Nov 24 02:22:22 -0800 2010
    ActionController::RoutingError (No route matches "/timelogs/325/stop"):
    

    所有这些看起来都应该是有效的,但事实并非如此。有什么问题吗?

    2 回复  |  直到 15 年前
        1
  •  0
  •   noodl    15 年前

    我认为你粘贴的路由没有问题,并且已经在scratch应用程序中验证它们对我有效。

    Started POST "/timelogs/123/stop" for 127.0.0.1 at 2010-11-24 11:49:25 +0000
      Processing by TimelogsController#stop as */*
      Parameters: {"a"=>"b", "id"=>"123"}
    Rendered text template (0.0ms)
    Completed 200 OK in 60ms (Views: 59.9ms | ActiveRecord: 0.0ms)
    

    也许你的路线上还有别的东西?

        2
  •  0
  •   Neil Middleton    14 年前

    实际上,当您试图用现有资源(票证)发送表单时,默认情况下,Rails将发送 PUT 请求,所以你应该设置 :method => :post 清除或更改路线

    post :resolve, :on => :member
    

    put :resolve, :on => :member