Rails 3: Comment puis-je valider pour permettre espaces vides ( “ ” ), mais pas nulle (NULL dans la base de données)
Dans un ActiveRecord (ou ActiveModel) je voudrais la spécification suivante pour passer
it { should allow_value("").for(:my_string) }
it { should_not allow_value(nil).for(:my_string) }
J'ai essayé
validates :my_string, {
:length => { :in => 0..255 },
:presence => true,
:allow_blank => true,
:allow_nil => false,
}
et aussi
validates :my_string, {
:length => { :in => 0..255 },
:allow_blank => true,
:allow_nil => false,
}
Mais elle permet à la fois "" et de néant, ou aucune.
OriginalL'auteur Jarl | 2012-09-12
Vous devez vous connecter pour publier un commentaire.
Vous pourriez avoir besoin de faire une validation personnalisée pour cela:
OriginalL'auteur weexpectedTHIS
Cela fonctionne pour moi
Si vous voulez juste pour vérifier que le champ n'est pas nul, mais ne se soucient pas de vide/vide chaînes de caractères, cela fonctionne:
OriginalL'auteur Chris Bloom
Vous pouvez essayer de faire:
Il fait partie des validations eux-mêmes dans ActiveRecord.
J'ai essayé les autres et ils sont tous très compliated ou de permettre à néant.
OriginalL'auteur Sergio Ocón Cárdenas
Ou peut-être:
Semble que
allow_nil
ne remplace pasallow_blank
.Afin de mieux vous ne spécifiez
allow_blank
it { should_not allow_value(nil).for(:my_string) }
échouer.lorsque vous avez
presence: true, allow_blank: true, allow_nil: false
en même temps. Il permettra à néantOriginalL'auteur Lucca Mordente
Vous pouvez créer un validateur personnalisé (placé dans
app/validators
dir)et puis
record.errors.add(attribute, 'must not be nil) if value.nil?
OriginalL'auteur snovity