在Heroku中输出Rails的布尔值给出“t”而不是“true”和“f”而不是false?

时间:2013-02-20 08:35:58

标签: ruby-on-rails heroku

我刚刚在Rails的Users表中添加了两个新列,并在Heroku上找到了一些令人惊讶的结果与本地环境相比,并且与之前的Heroku使用情况相比较!你知道会发生什么吗?

这是迁移:

class AddMoreIntroFlagsToUsers< ActiveRecord的::迁移   改变     add_column:users,:has_seen_first_intro,:boolean,:null => false,:default =>假     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。我在添加早期列之后运行了类似的代码,并且它曾经工作过。现在改变了什么?

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

3 个答案:

答案 0 :(得分:1)

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

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

signed_in? and current_user.has_seen_store_intro?

编辑: 如果事实可能不起作用,您可能希望按照this post

尝试解决方案

答案 1 :(得分:1)

任何人仍然在heroku上遇到此问题,请尝试重新启动应用

heroku restart --app yourappname

答案 2 :(得分:0)

也许你有't'存储在数据库中的current_user.has_seen_store_intro的真值,可能是因为它是由支持布尔存储为't'和{{的布尔值的其他数据库适配器添加的1}}。我们假设'f'返回signed_in? - 在这种情况下:

true

那是在Heroku。在您的开发环境中,数据库适配器将1.9.3p194 :008 > a = true => true 1.9.3p194 :009 > b = 't' => "t" 1.9.3p194 :010 > a and b => "t" 't'理解为布尔值,因此它返回'f'

只是一种可能性。