Вопрос по ruby-on-rails – По умолчанию база данных Rails и проверка модели для логических полей
В модели 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>
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]}
.save
Error: User Rate Limit Exceeded
что это лучше, чтобы обернуть это в пользовательский валидатор.
в/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