[英]lost session after 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,沒有任何問題。 但是對於其他瀏覽器,session [: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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.