2011-03-02 80 views
2

我正在研究一个新的应用程序,并试图自定义Devise在提交登录表单后发送登录或新注册的用户。为什么rails试图重定向?

我想给用户发送回在登录行动是从,所以我创建了这些方法application_controller.rb

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    def store_location 
    session[:origin_url] = request.request_uri if request.get? and controller_name != "user_sessions" and controller_name != "sessions" 
    end 

    def redirect_back_or_default(default) 
    redirect_to(session[:origin_url] || default) 
    end 


    def after_sign_in_path_for(resource_or_scope) 
    [#https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-in][1] 
    p "*********** About to check session" 
    if session[:origin_url] 
     p "*****************Redirecting after sign_in to " + session[:origin_url] 
     redirect_back_or_default(docs_path) 
     return #this syntax needs to be checked 
    else 
    super 
    end 
    return 
    end 
end 

这里所谓的页面是docs_controller,show动作代码:

# GET /docs/1 
    # GET /docs/1.xml 
    def show 
    @doc = Doc.find(params[:id]) 
    store_location 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @doc } 
    end 
    end 

这里是从服务器日志的输出:

"*********** About to check session" 
"*****************Redirecting after sign_in to /docs/3" 


Started GET "https://stackoverflow.com/users/sign_in" for 127.0.0.1 at Wed Mar 02 01:12:16 +0100 2011 
    Processing by Devise::SessionsController#new as HTML 
    User Load (0.9ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 3 LIMIT 1 
Redirected to http://localhost:3000/docs/3 
Redirected to 
Completed in 119ms 

ActionController::ActionControllerError (Cannot redirect to nil!): 


Rendered /home/jon/.rvm/gems/[email protected]/gems/actionpack-3.0.5/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.7ms) 
Rendered /home/jon/.rvm/gems/[email protected]/gems/actionpack-3.0.5/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (955.7ms) 
Rendered /home/jon/.rvm/gems/[email protected]/gems/actionpack-3.0.5/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (986.3ms) 

我用Rails 3.0.5

感谢您的任何意见...

回答

3

after_sign_in_path_for(好像是这个名字说)应该返回的路径,并没有做任何redirect_to魔法。

既然你只是return到处都是没有任何回报价值,Devise可能会得到你的nil

+0

这就是原因。我会清理'回归疯狂'。 – CHsurfer 2011-03-02 07:16:55