丢失会话redirect_to的

问题描述:

新添加的描述后:(抱歉没有提)丢失会话redirect_to的

的ApplicationController.current_account定义为:

class ApplicationController < ActionController::Base 
    class << self 
    def current_account 
     @current_account 
    end 
    def current_account=(value) 
     @current_account = value 
    end 
    end 

=========

我在我目前的项目中遇到了一个奇怪的表现,这是关于会议。奇怪的部分是它在Safari中是正常的,但在其他浏览器(包括chrome,firefox和opera)中失败了。

有针对的关键部分信息(电子邮件,密码等)输入登记表,并提交给称为行动“创造”

这是创建行动的基本代码:

@account = Account.new(params[:account]) 
if @account.save 
    ApplicationController.current_account = @account 
    session[:current_account] = ApplicationController.current_account 
    session[:account] = ApplicationController.current_account.id 

    email = @account.email 
    Mailer.deliver_account_confirmation(email) 

    flash[:type] = "success" 
    flash[:notice] = "Successfully Created Account" 

    redirect_to :controller => "accounts", :action => "create_step_2" 
else 
    flash[:type] = "error" 
    flash[:title] = "Oops, something wasn't right." 
    flash[:notice] = "Mistakes are marked below in red. Please fix them and resubmit the form. Thanks." 
    render :action => "new" 
end 

另外我创建应用程序中的控制器的before_filter,其具有下面的代码:

ApplicationController.current_account = Account.find_by_id(session[:current_account].id) unless session[:current_account].blank? 

对于Safari浏览器,就没有任何问题。但对于其他浏览器,会话[:current_account]不存在,因此产生以下错误消息:

RuntimeError in AccountsController#create_step_2 

Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id 

请任何人都可以帮助我吗?

1]不写

ApplicationController.current_account 

只是

current_account 

2]在您的application_controller

def current_account 
    session[:current_account] 
    end 

3]

ApplicationController.current_account = @account 
    session[:current_account] = ApplicationController.current_account 
    session[:account] = ApplicationController.current_account.id 

应该是

session[:current_account] = @account 
    session[:account] = @account.id 
+0

对不起,我忘了说current_account被定义为: 类ApplicationController中 PeterWong 2010-06-08 06:13:21

+0

对不起,@皮特我不确定那么它会为你工作。我从来没有像以前那样使用过,所以不是一个想法。对不起 – Salil 2010-06-08 06:28:05

+0

我在ApplicationController中使用了类变量而不是实例变量,因为帐号模型中的一些验证代码将需要current_account。 (即validates_xxx,:if =>:some_method_needed_current_account)。我不知道如何将实例变量传递给模型的验证。 – PeterWong 2010-06-08 06:42:42