rails scope with where = false,在heroku上的工作方式不同

Arn*_*Roa 1 mysql postgresql ruby-on-rails heroku

我的代码上有这个:

scope :to_send, where(:sent => false)
Run Code Online (Sandbox Code Playgroud)

在本地使用mysql我看到了这个:

`scheduled_messages`.`sent` = 0 
Run Code Online (Sandbox Code Playgroud)

在Heroku而不是(与pg):

"scheduled_messages"."sent" = 'f' 
Run Code Online (Sandbox Code Playgroud)

为什么?

mu *_*ort 9

PostgreSQL有一个本机boolean类型,其中true表示字符串文字't',false 表示'f'(有其他文字,但那些是最常见的文字).MySQL没有本机布尔类型,而是使用C风格的整数来代替布尔值.

Rails的MySQL和PostgreSQL适配器负责将本机Ruby值(例如false)转换为相关数据库的等价物(0对于MySQL,'f'对于PostgreSQL).

看起来你是在MySQL上开发但在PostgreSQL上部署.布尔处理的差异是您最不担心的.您真的应该在同一个数据库之上进行开发和部署.