2013-05-08 52 views
1

我正在使用rails 3.我的整个应用仅限于使用Devise 2.2的注册用户。如何通过设计收集用户订阅请求的URL

我的要求: 能够说“用户想要在订阅时显示项目X(如条目/中:id是请求的URL)”。只要有可能,它就会告诉用户在注册时想看到什么应用程序。

例如:John点击www.website/item/48链接,但他没有注册到系统中。在设计将他重定向到设计登录页面后,他注册并被重定向(标准设计行为)到www.website/item/48。后来,该网站的管理员能够看到用户[email protected]创建了一个帐户,因为他想看到项目48.

当前设计是建立最经典的方式,所有我的控制器中有一个before_filter :authenticate_user! 。除设计外,登录/子订阅页面与默认页面类似。

我已经overided色器件默认登记控制器:

class RegistrationsController < Devise::RegistrationsController 

    def new 
    super 
    logger.debug"--------------------------------" 
    logger.debug session.inspect 
    logger.debug params.inspect 
    logger.debug resource 
    logger.debug"--------------------------------" 
    end 

    def create 
    super 
    logger.debug"-----------------------------------" 
    logger.debug session.inspect 
    logger.debug params.inspect 
    logger.debug resource.inspect 
    logger.debug"-----------------------------" 
    end 
end 

我对如何从设计获得请求的URL没有任何线索。我可以在新操作期间在会话变量中看到它,但一旦创建,我无法找到它。

如何在Devise的创建操作中获取并保存请求的URL?

回答

1

您shoulde覆盖sign_up方法在你的注册控制器是这样的:

def sign_up(resource_name, resource) 
    scope = Devise::Mapping.find_scope!(resource)) 
    path = session["#{scope}_return_to"] || signed_in_root_path(scope) 
    logger.debug("Requested path before sign up: #{path}") 
    sign_in(resource_name, resource) 
end 

,如果你想将其存储在一些其他的方式,你可以当然改变logger.debug。重要的部分是session["#{scope}_return_to"] || signed_in_root_path(scope)

这将返回与after_sign_up_path_for(resource)相同的结果,但不会删除会话中的引用路径。

+1

它做我想要什么,但显然,它的阅读#{}范围在_return_to会议,并立即删除它。我要么获得网址,要么让用户在注册后不会重定向到原始网址。我需要两个,最重要的是,我需要一个完美的工作设计,因为我会使用不同类型的用户...:/但你的答案让我走上正确的道路,我会更新 – Syl 2013-05-15 16:29:21

+0

我已经更新了我的回答:) – jokklan 2013-05-16 07:57:33

2

右键,您可以覆盖sign_up方法和获取URL用下面的代码:

def sign_up(resource_name, resource) 
    scope = Devise::Mapping.find_scope!(resource_or_scope) 
    url = session["#{scope}_return_to"] # here is your url 

    super 
end 
+0

为什么在sign_up而不是创建它更好? – Syl 2013-05-15 18:24:51

+1

好吧,我觉得你可以在创造中做到。这只是一个获得return_to url的例子:) – 2013-05-15 19:40:34