【问题标题】:Outputting booleans for Rails in Heroku gives "t" instead of "true" and "f" instead of false?在 Heroku 中为 Rails 输出布尔值会给出“t”而不是“true”和“f”而不是 false?
【发布时间】:2013-02-20 08:35:58
【问题描述】:

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

这是迁移:

类 AddMoreIntroFlagsToUsers false, :default => false add_column :users, :has_seen_store_intro, :boolean, :null => false, :default => false 结尾 结束

但是,我认为下面的 JavaScript 输出的是 t 和 f 而不是 true 和 false...

User.hasSeenStoreIntro =

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

User.hasSeenStoreIntro = t

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

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

我认为唯一改变的是过去几天我的生产表中的用户数量显着增加。

【问题讨论】:

  • 本地环境和 Heroku 环境有区别吗?各自使用什么数据库?

标签: ruby-on-rails heroku


【解决方案1】:

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

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

signed_in? and current_user.has_seen_store_intro?

编辑: 如果事实可能不起作用,您可能想尝试按照this post 解决方案

【讨论】:

    【解决方案2】:

    还有人在heroku上遇到这个问题,请尝试重新启动应用程序

    heroku restart --app yourappname
    

    【讨论】:

    • 这实际上应该是正确的答案。就这么简单,谢谢!
    【解决方案3】:

    也许您将'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

    只是一种可能。

    【讨论】:

    • 这是错误的例子。 and 运算符将始终为您提供 true,因为其他字符串('t' 或 'f')将始终为 true(因为不是 nil)
    • 这有什么问题?它显然给出了't',而不是true't' 显然是一个真实的值,但这对问题没有意义。
    • Logical and 如果所有参数都为真,则为真。字符串将始终返回true,无论是't' 还是'f'。如果运算符的结果是 true,则 ruby​​ 的 &&and 将始终返回最后一个参数。试试't' and 'f'
    • 我都知道。我不知道你想表达什么观点。我的回答哪一部分是错的?
    • 使用 a and bb 作为字符串 - 将返回 a 的真值。并且根据主题启动器的问题 - signed_in? and current_user.has_seen_store_intro 应该产生一些布尔值 - 使用将布尔值指示为“t”或“f”的字符串类型将返回 true,即使 current_user.has_seen_store_intro 将返回 'f'
    猜你喜欢
    • 1970-01-01
    • 2022-07-16
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2012-10-20
    相关资源
    最近更新 更多