потерянный сеанс после redirect_to - PullRequest
0 голосов
/ 08 июня 2010

Недавно добавленное описание: (извините, что не упомянул)

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 Ответ

0 голосов
/ 08 июня 2010

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...