レガシー MySQL データベースを使用する Rails アプリケーションを作成しました。1 つのテーブルにこのフィールドが含まれています
CREATE TABLE `articles` (
`active` tinyint(3) unsigned NOT NULL DEFAULT '0',
);
私はスキーマを修正しました
t.boolean "active", :default => false
しかし、レールはそのフィールドをブール値として認識しません
[1] pry(main)> Article.new.active.class
=> Fixnum
クラスにこのバリデーターがあるため、これにより検証に問題が発生します
class Article < ActiveRecord::Base
validates_inclusion_of :active, :in => [true, false]
end
そのフィールドにブール値を割り当てると、それらは FixNum に変換され、検証はメッセージで失敗します"1 is not included in the list"
同じモデルで新しいアプリを生成すると、生成された SQL コードは
CREATE TABLE `posts` (
`active` tinyint(1) DEFAULT NULL,
)
そして、すべて正常に動作します:
[1] pry(main)> Article.new.active.class
=> FalseClass
従来の列をブール値として認識させる方法はありますか (おそらく移行を実行せずに)?