没有路线匹配DELETE Sessions Api

时间:2014-08-30 01:55:29

标签: ruby ruby-on-rails-3 api session login

我已经开始为我的rails应用程序创建一个Api。我目前正在创建用于登录的会话控制器。

但出于某种原因我收到了这个错误

Started DELETE "/api/v1/sessions/?auth_token=6157d3673725013ebddbb5e26e8cd64756949110" 
for 127.0.0.1 at 2014-08-29 18:54:18 -0700

ActionController::RoutingError (No route matches [DELETE] "/api/v1/sessions"):

我不明白为什么会这样。注销似乎在实际的Web应用程序上完美运行。

我知道根据rake路线可能需要一个ID,但我不知道如何实现它。

API CONTROLLER

module Api
  module V1
    class SessionsController < ApplicationController
      skip_before_filter :verify_authenticity_token,
                       :if => Proc.new { |c| c.request.format == 'application/json' }

      respond_to :json

      def destroy
        sign_out
        render :status => 200,
           :json => { :success => true,
                      :info => "Logged Out",
                      :data => {} }
      end

    end
  end
end

CONTROLLER

class SessionsController < ApplicationController

  def destroy
    sign_out
    redirect_to root_path
  end

end

会话助手

def sign_out 
  current_user = nil
  cookies.delete(:remember_token)
end

路线

### API Routes
namespace :api, defaults: {format: 'json'} do
  scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do
    resources :sessions, only: [:new, :create, :destroy]
  end
end

RAKE ROUTES

api_v1_sessions POST   /api/v1/sessions(.:format)                        
api/v1/sessions#create {:format=>"json"}

api_v1_session DELETE /api/v1/sessions/:id(.:format)                    
api/v1/sessions#destroy {:format=>"json"}

1 个答案:

答案 0 :(得分:2)

来自documentation

您可以使用resource代替resources路线助手。它用于为您不使用ID访问的单一资源创建路由。

namespace :api, defaults: {format: 'json'} do
  namespace :v1, constraints: ApiConstraints.new(version: 1, default: true) do
    resource :session, only: [:new, :create, :destroy]
  end
end

会给你

GET       /session/new
POST      /session
DELETE    /session