30

Railsモデルでは、属性がありますis_subscriber。この列をデータベースに追加するためにデータベース移行を構築したときに、デフォルト値をfalseに指定しました。

t.boolean  "is_subscriber",   :default => false

また、この属性が存在する必要があることをモデルで指定しました。

validates :is_subscriber, presence: true

では、この属性を指定せずにモデルインスタンスを作成すると、なぜこのエラーが発生するのでしょうか。

2012-05-08T21:05:54+00:00 app[web.1]: ActiveRecord::RecordInvalid (Validation failed: Is subscriber can't be blank):
4

4 に答える 4

55

ここから

ブール フィールド (実際の値は true と false) の存在を検証する場合は、validates_inclusion_of :field_name, :in => [true, false] を使用する必要があります。ブール値を処理します。false.blank? # => 真

またはRails3の方法で

validates :field, :inclusion => {:in => [true, false]}
于 2012-05-08T21:18:08.180 に答える
1

私はこれを解決しました:

validates_presence_of :is_subscriber, :if => 'is_subscriber.nil?'
于 2014-11-25T15:12:14.067 に答える
1

これをカスタムバリデーターでラップする方がきれいだと思います。

/app/validators/is_boolean_validator.rb

class IsBooleanValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, parameters)
    if !parameters.in? [true,false]
      record.errors[attribute] << 'This must be true or false.'
    end
  end
end

次に、以下を追加して、これがロードされていることを確認する必要があります/config/application.rb

config.autoload_paths += %W["#{config.root}/app/validators/"]

(これをロードするためにサーバーを再起動することを忘れないでください)

その後、よりきれいに検証できます

validates: :field1, field2, is_boolean: true
于 2016-11-28T15:17:25.250 に答える