2012-04-27 31 views
0

我有設計和用戶控制器設計與寧靜的用戶

的routes.rb

devise_for :users 

    resources :users do 
    resources :blogs 
    end 

users_controller.rb

class UsersController < ApplicationController 
    respond_to :html, :xml, :json 

    def create 
    @user = User.create(params[:user]) 
    end 

    def show 
    @user = User.find(params[:id]) 
    @asset = Asset.find(params[:id]) 
    respond_with [@user, @asset] 
    end 

    def update 
    @user = User.find(params[:id]) 
    @user.update_attributes(params[:user]) 
    respond_with @user 
    end 
end 

當我訪問http://localhost:3000/users/sign_out

我得到

ActiveRecord::RecordNotFound in UsersController#show 

Couldn't find User with id=sign_out 

更新:

    users GET /users(.:format)         users#index 
         POST /users(.:format)         users#create 
       new_user GET /users/new(.:format)        users#new 
       edit_user GET /users/:id/edit(.:format)       users#edit 
        user GET /users/:id(.:format)        users#show 
         PUT /users/:id(.:format)        users#update 
         DELETE /users/:id(.:format)        users#destroy 
     new_user_session GET /users/sign_in(.:format)       devise/sessions#new 
      user_session POST /users/sign_in(.:format)       devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)       devise/sessions#destroy 
      user_password POST /users/password(.:format)       devise/passwords#create 
     new_user_password GET /users/password/new(.:format)      devise/passwords#new 
     edit_user_password GET /users/password/edit(.:format)      devise/passwords#edit 
         PUT /users/password(.:format)       devise/passwords#update 
cancel_user_registration GET /users/cancel(.:format)       devise/registrations#cancel 
     user_registration POST /users(.:format)         devise/registrations#create 
    new_user_registration GET /users/sign_up(.:format)       devise/registrations#new 
    edit_user_registration GET /users/edit(.:format)        devise/registrations#edit 
         PUT /users(.:format)         devise/registrations#update 
         DELETE /users(.:format)         devise/registrations#destroy 

任何解決方案?

+0

您所看到的是一個路由錯誤,雖然也許您知道這一點。它看起來像試圖用Users#show action做出響應,但沒有堆棧跟蹤,我無法確定。嘗試運行'rake routes'並向我們展示處理用戶的部分,這樣我們就可以知道'users/sign_out'路由是否正在映射。 – TCopple 2012-04-27 14:57:36

+0

我不明白如何設置優先級,我將'devise_for:users'移動到'resources:users'下面,但它沒有幫助 – 2012-04-27 15:55:14

回答

4

這是因爲您的會話被DELETE方法銷燬。

從你rake routes

destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy 

當您訪問http://localhost:3000/users/sign_out,您使用GET

您可以initializers/devise.rb改變方法。只需將config.sign_out_via設置爲:get

+1

在[devise問題跟蹤器](https:// github)中有一個簡短的描述.COM/plataformatec /色器件/問題/ 1192#issuecomment-1536551) – Michael 2012-07-05 17:10:55

0

您的routes.rb文件和您生成的路線看起來不匹配。按照順序評估路線,並提供匹配的第一個路線。

在自定義用戶路由之前,您需要您的設計路線。像這樣的東西...

 new_user_session GET /users/sign_in(.:format)       devise/sessions#new 
      user_session POST /users/sign_in(.:format)       devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)       devise/sessions#destroy 
      user_password POST /users/password(.:format)       devise/passwords#create 
     new_user_password GET /users/password/new(.:format)      devise/passwords#new 
     edit_user_password GET /users/password/edit(.:format)      devise/passwords#edit 
         PUT /users/password(.:format)       devise/passwords#update 
cancel_user_registration GET /users/cancel(.:format)       devise/registrations#cancel 
     user_registration POST /users(.:format)         devise/registrations#create 
    new_user_registration GET /users/sign_up(.:format)       devise/registrations#new 
    edit_user_registration GET /users/edit(.:format)        devise/registrations#edit 
         PUT /users(.:format)         devise/registrations#update 
         DELETE /users(.:format)         devise/registrations#destroy 
        users GET /users(.:format)         users#index 
         POST /users(.:format)         users#create 
       new_user GET /users/new(.:format)        users#new 
       edit_user GET /users/:id/edit(.:format)       users#edit 
        user GET /users/:id(.:format)        users#show 
         PUT /users/:id(.:format)        users#update 
         DELETE /users/:id(.:format)        users#destroy 

我確認你的路線文件看起來像你發佈的,因爲它似乎不一致。