0

我刚刚在 Rails 中的用户表中添加了两个新列,与我的本地环境相比,在 Heroku 上发现了一些令人惊讶的结果,与早期的 Heroku 使用相比!你知道可能发生了什么吗?

这是迁移:

类 AddMoreIntroFlagsToUsers < ActiveRecord::Migration def change add_column :users, :has_seen_first_intro, :boolean, :null => false, :default => false add_column :users, :has_seen_store_intro, :boolean, :null => false, :default =>假端端

但是,在我看来,以下 JavaScript 输出 t 和 f 而不是 true 和 false ...

User.hasSeenStoreIntro = <%= signed_in? 和 current_user.has_seen_store_intro %>

转换为:(我期待的是真或假,而不是 t 和 f!)

User.hasSeenStoreIntro = t

这给出了一个 JS 错误,因为 t 没有定义!

知道为什么这只会发生在新列上吗?对于我的旧专栏,它从来没有这样做过。一个可能相关的问题是我运行了一条安全路由来设置用户。所有现有用户的 has_seen_first_intro = true 和 user.has_seen_store_intro = true,但这些列并未更新为 true。添加较早的列后,我运行了类似的代码,并且它曾经可以工作。现在有什么变化?

我能想到的唯一变化是,在过去的几天里,我的生产表中的用户数量显着增长。

4

3 回答 3

1

IIRC Rails 的 SQLite 适配器将布尔值默认为 t/f

要与数据库无关,您可以尝试使用 Rails 对布尔字段的自动评估

signed_in? and current_user.has_seen_store_intro?

编辑:如果事实可能不起作用,您可能想尝试按照这篇文章解决

于 2013-02-20T09:26:35.183 回答
1

任何人仍然在heroku上遇到这个问题,尝试重新启动应用程序

heroku restart --app yourappname
于 2017-04-14T10:15:58.297 回答
0

也许您't'在数据库中存储了 的真实值current_user.has_seen_store_intro,可能是因为它是由不同的数据库适配器添加的,该适配器支持将布尔值存储为't''f'。让我们假设signed_in?返回true- 在这种情况下:

1.9.3p194 :008 > a = true
 => true 
1.9.3p194 :009 > b = 't'
 => "t" 
1.9.3p194 :010 > a and b
 => "t"

那是在 Heroku 中。在您的开发环境中,您的数据库适配器理解't''f'布尔值,因此它返回true.

只是一种可能。

于 2013-02-20T09:16:07.157 回答