Вопрос по ruby-on-rails – По умолчанию база данных Rails и проверка модели для логических полей

22

В модели Rails у меня есть атрибутis_subscriberКогда я создал миграцию БД для добавления этого столбца в базу данных, я указал значение по умолчанию, равное false:

<code>t.boolean  "is_subscriber",   :default => false
</code>

Я также указал в модели, что этот атрибут должен присутствовать:

<code>validates :is_subscriber, presence: true
</code>

Так почему же я получаю эту ошибку при создании экземпляра модели без указания этого атрибута?

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

Ваш Ответ

3   ответа
1

validates_presence_of :is_subscriber, :if => 'is_subscriber.nil?'
47

Вот

If you want to validate the presence of a boolean field (where the real values are true and false), you will want to use validates_inclusion_of :field_name, :in => [true, false] This is due to the way Object#blank? handles boolean values. false.blank? # => true

Или в Rails3 способом

validates :field, :inclusion => {:in => [true, false]}
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Andrew Lauer Barinov
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded.saveError: User Rate Limit Exceeded
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

Похожие вопросы