ruby-on-rails - Heroku 上的 Rails : session variables nil

标签 ruby-on-rails ruby ruby-on-rails-3 session heroku

我做了很多研究,但找不到任何类似的问题/答案,因此非常感谢您的帮助。

我的应用程序在本地运行良好,但是当我推送到 Heroku 时,它会阻塞我的 session 变量。具体来说,当我尝试访问 session 中保存的对象的属性时,它会为 nil:NilClass 抛出一个 NoMethodError。在切换到参数并取得成功后,我将其缩小到 session 。但是,我更喜欢使用 session ,因为它使我的代码更清晰一些。

我四处寻找,似乎每个 session 对象都会发生这种情况。快速上下文是我创建一个新的负责人,然后是一个新的组织,然后将负责人与组织相关联。

协议(protocol)是 https(这是一个结帐页面)并且这些调用是通过 jQuery 异步发生的,但我不确定这是否重要。 rails 3.2。 Heroku 上的 Cedar/Postgres。 Sqlite3/Thin 本地。

Heroku 上的 session 发生了什么?

生产.rb

config.session_store :cookie_store, :key => '_my_app_session', :domain => :all

应用程序 Controller .rb

...

helper_method :current_charge
def current_charge
  @_current_charge ||= session[:current_charge_id] &&
  Charge.find_by_id(session[:current_charge_id])
end

...

charges_controller.rb

def create
  @charge = Charge.new(params[:charge])
  if @charge.save
    session[:current_charge_id] = @charge.id
  ...
end

organizations_controller.rb

def create
  @organization = Organization.new(params[:organization])
  if @organization.save
    @charge = current_charge
    @charge.organization_id = @organization.id
    @charge.save!
  ...
end

Cedar 日志(在 organizations_controller.rb 上抛出)

NoMethodError (undefined method `organization_id=' for nil:NilClass):

最佳答案

当您使用 new 实例化记录时,记录在保存之前不会持久保存到数据库中,并且在保存之前不会为记录分配 ID。

在您的代码中:

def create
  @charge = Charge.new(params[:charge])
  session[:current_charge_id] = @charge.id
  ...
end

@charge.id 此时为 nil,因此不会有 id。您需要在 charges_controller.rb 中使用 create 为记录提供一个 id:

def create
  @charge = Charge.create(params[:charge])
  session[:current_charge_id] = @charge.id
  ...
end

或者使用您现有的代码并在设置 session key 之前添加一个保存:

def create
  @charge = Charge.new(params[:charge])

  @charge.save

  session[:current_charge_id] = @charge.id
  ...
end

关于ruby-on-rails - Heroku 上的 Rails : session variables nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21591079/

相关文章:

ruby - 为什么一个 Ruby 程序/进程会产生多个线程?

ruby-on-rails - 将密码作为环境变量(而不是纯文本)存储在配置文件中是否安全?

ruby-on-rails - 在 Rails 应用程序上安装 Bootstrap 3

ruby - 使用 `and` 进行赋值

ruby-on-rails-3 - Rails has_one 与连接表

ruby-on-rails-3 - PG::Error: ERROR: 将记录插入关联模型时,列 "created_at"中的空值

ruby-on-rails - Devise 和 Twitter Bootstrap 中的 Flash 消息

ruby-on-rails - 对象集合的 Rails 模型类方法

ruby-on-rails - Ruby(猴子修补数组)

ruby-on-rails - 嵌套模型错误消息