Validation des modèles Rails: j'ai besoin de validates_inclusion_of avec une false sensible à la casse?
-
29-10-2019 - |
Question
Voici du code qui ne fonctionne pas
class WeekDay < ActiveRecord::Base
validates_inclusion_of :day, :in => %w(sunday monday tuesday wednesday thursday friday saturday), :case_sensitive => false
end
Actuellement, j'ai tous les jours en dB sauf dimanche. J'essaie d'ajouter "dimanche", et obtenir des erreurs "n'est pas incluse dans la liste".
La solution
validates_inclusion_of n'a pas d'argument Case_Sensitive, vous pouvez donc créer votre propre validateur (si vous utilisez Rails 3):
class DayFormatValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
unless %w(sunday monday tuesday wednesday thursday friday saturday).include?(value.downcase)
object.errors[attribute] << (options[:message] || "is not a proper day.")
end
end
end
Et enregistrez ceci dans votre répertoire Lib comme:
lib/day_format_validator.rb
Ensuite, dans votre modèle, vous pouvez avoir:
validates :day, :day_format => true
Assurez-vous simplement que Rails charge ce fichier lib au démarrage en mettant cela dans votre config / application.rb:
config.autoload_paths += Dir["#{config.root}/lib/**/"]
Autres conseils
class WeekDay < ActiveRecord::Base
before_validation :downcase_fields
validates_inclusion_of :day, :in => %w(sunday monday tuesday wednesday thursday friday saturday)
def downcase_fields
self.day.downcase!
end
end
Cela classe le champ avant d'exécuter la validation
Une petite solution simple si elle n'est pas inquiet de séparer les validations dans la LIB
class WeekDay < ActiveRecord::Base
validate :validate_day
def validate_day
if !self.day.nil?
errors.add(:day, "is not included in the list") unless %w(sunday monday tuesday wednesday thursday friday saturday).include?(self.day.downcase)
end
end
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow