会话值在重定向rails 4后重置

我正在使用设计3.5.1,rails 4.0.0和ruby 2.0.0-p0。

如果用户未登录并尝试打开需要身份validation的私有页面,请使用lvh.me:3000/users/1/edit ,然后设计将针对关键user_return_to在会话中添加users/1/edit 。 问题是当用户在身份validation失败后被重定向到登录页面时,会话中的user_return_to值会重置。

我的应用程序遍布此问题。 如果我在会话中存储值并从同一操作重定向到另一个路径,则会话值将消失。

注意:我已将rails应用程序从(rails 3.0.4,ruby 1.8.7)升级到(rails 4.0.0,ruby 2.0.0)。

对不起,问题中有任何含糊之处。 如果您有任何疑问,请发表评论。

更新:

在我的应用程序控制器中,我添加了一个beforefilter来validation用户身份。 应用程序控制器中仅显示相关代码。

application_controller.rb

 class ApplicationController  :devise_controller? # rest of the code end 

我正在使用inheritanceDevise::FailureApp的自定义失败类。 代码看起来像这样。

custom_failure.rb

 class CustomFailure < Devise::FailureApp def redirect_url eval "new_user_session_path" end def redirect store_location! flash[:alert] = i18n_message # session[:user_return_to] returns '/foobar' here. redirect_to redirect_url end end 

我在上面的代码中注释了一行。 session [:user_return_to]在该行可用,但在下一行重定向后,会话[:user_return_to]变为nil。

我已将设计从1.5.3升级到3.5.1。

我在这里添加解决方案以防其他人遇到同样的问题。

我的应用程序中有一个名为asset的资源,它与资产管道冲突。 每当我的url包含’资产’,例如’/ assets’时,会话就会重置。 因此,如果您有一个名为asset的资源,那么您必须更改资产管道的前缀。 为此,请在application.rb文件中添加以下行。

config.assets.prefix = '/static_assets'

您还必须将资产管道文件夹重命名为static_assets

请注意,此解决方案仅适用于您的应用程序中有一个名为Asset的资源且rails版本为3.1+的情况