私は私のコードにこれを持っています:
scope :to_send, where(:sent => false)
ローカルでmysqlを使用すると、次のように表示されます。
`scheduled_messages`.`sent` = 0
代わりにHerokuで(pg付き):
"scheduled_messages"."sent" = 'f'
なんで?
私は私のコードにこれを持っています:
scope :to_send, where(:sent => false)
ローカルでmysqlを使用すると、次のように表示されます。
`scheduled_messages`.`sent` = 0
代わりにHerokuで(pg付き):
"scheduled_messages"."sent" = 'f'
なんで?
PostgreSQL にはネイティブboolean
型があり、true は文字列リテラルで表され、't'
false は'f'
(他にもリテラルがありますが、最も一般的なものです) で表されます。MySQL にはネイティブのブール型がなく、代わりに C スタイルの整数をブール値に使用します。
Rails 用の MySQL および PostgreSQL アダプターは、ネイティブの Ruby 値 ( などfalse
) を対象のデータベースの同等の値 ( 0
MySQL の場合'f'
、PostgreSQL の場合) に変換します。
MySQL の上で開発しているが、PostgreSQL にデプロイしているようです。ブール値の処理の違いは、心配する必要はありません。同じデータベース上で開発およびデプロイする必要があります。