2

アクティブなレコードの移行にブール列を追加しました

class AddIncludeInConsolidationToCompanies < ActiveRecord::Migration
  def change
    add_column :companies, :include_in_consolidation, :bool, :default => true
  end
end

データベースからレコードをフェッチするたびに、true または false の代わりに「f」または「t」が返されます。

データベースとの間の型キャストを自動的に処理することは想定されていません。

ActiveRecord::Base.connection.quoted_true/falseデフォルトでtrueになっているようなものです。

これを回避する最善の方法は何ですか? 理想的には、それが機能するはずです。ブール値の列は、デフォルトで文字列ではなくブール値を返す必要があります。

4

3 に答える 3

4

「t」と「f」は、PostgreSQL がブール値に使用するものです。

'bool' は、Rails 移行の有効なデータ型ではありません。「ブール値」を使用する必要があります。私の推測では、「bool」はデータベースに作成された列を取得していますが、Rails はデータがモデルにロードされるときに混乱します。移行を変更して再実行すれば、すべてうまくいくはずです。

于 2013-04-01T17:52:07.800 に答える
0

私が間違っているかもしれませんが、ブール値は 'f' または 't' として PostgreSQL に保存されます。

ただし、RoR ロジックでは従来の true/false を使用できます。「アクティブ」という名前のブール属性を持つユーザーモデルがあれば、次のことができます

 if !user.active?
   # do something
 else
   # do something else
 end

ご覧のとおり、真/偽のテストは正常に機能します...

乾杯

于 2013-04-01T09:32:39.377 に答える
0

postgresql では t と f を使用してブール値が出力されますが、「TRUE と FALSE のキーワードが推奨される (SQL 準拠の) 使用方法です。」

http://www.postgresql.org/docs/9.4/static/datatype-boolean.html

なぜこの選択​​がなされたのかは不明です。

于 2015-04-03T01:30:31.590 に答える