Недавно добавленное описание: (извините, что не упомянул)
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
Пожалуйста, кто-нибудь может мне помочь?