1

私は私のコードにこれを持っています:

scope :to_send, where(:sent => false)

ローカルでmysqlを使用すると、次のように表示されます。

`scheduled_messages`.`sent` = 0 

代わりにHerokuで(pg付き):

"scheduled_messages"."sent" = 'f' 

なんで?

4

1 に答える 1

9

PostgreSQL にはネイティブboolean型があり、true は文字列リテラルで表され、't'false は'f'(他にもリテラルがありますが、最も一般的なものです) で表されます。MySQL にはネイティブのブール型がなく、代わりに C スタイルの整数をブール値に使用します。

Rails 用の MySQL および PostgreSQL アダプターは、ネイティブの Ruby 値 ( などfalse) を対象のデータベースの同等の値 ( 0MySQL の場合'f'、PostgreSQL の場合) に変換します。

MySQL の上で開発しているが、PostgreSQL にデプロイしているようです。ブール値の処理の違いは、心配する必要はありません。同じデータベース上で開発およびデプロイする必要があります。

于 2012-12-24T04:31:39.747 に答える