10

次のようなモデルがあります。

class Activity < ActiveRecord::Base
    attr_accessible :name, :admin

    validates :name, :presence => true
    validates :admin, :presence => true
end 

name プロパティは文字列であり、admin プロパティは移行でブール値として定義されます。

を使用してコンソールでモデルのインスタンスを作成しようとすると、

a = Activity.create(:name => 'Test', :admin => 0)

次に、管理者に値を提供する必要があると言って、検証が失敗します。なんで?値を指定しました。

値をまったく指定しなかったのか、それとも nil を指定したのか理解できました。しかし、0 のような値 (さらに言えば false) によって検証が失敗するのはなぜでしょうか?

4

2 に答える 2

20

validates :presenceblank?値が存在するかどうかを判断するために使用します。しかしfalse.blank?=>本当です。blank?そのため、値が存在しないことを ActiveRecord に伝えているため、検証は失敗します。

これを次のように書き換えることができます。

validates :field_name, :inclusion => { :in => [true, false] }

Rails ガイドで推奨されているように: ActiveRecord Validations

Ruby on Rails における nil v. empty v. blank の簡潔な説明も参照してください。

于 2012-11-05T05:23:27.607 に答える