丢失会话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
对不起,我忘了说current_account被定义为: 类ApplicationController中 PeterWong 2010-06-08 06:13:21
对不起,@皮特我不确定那么它会为你工作。我从来没有像以前那样使用过,所以不是一个想法。对不起 – Salil 2010-06-08 06:28:05
我在ApplicationController中使用了类变量而不是实例变量,因为帐号模型中的一些验证代码将需要current_account。 (即validates_xxx,:if =>:some_method_needed_current_account)。我不知道如何将实例变量传递给模型的验证。 – PeterWong 2010-06-08 06:42:42