Convalida del modello Rails: ho bisogno di validates_inclusion_of con case sensitive false?
-
29-10-2019 - |
Domanda
Ecco il codice che non funziona
class WeekDay < ActiveRecord::Base
validates_inclusion_of :day, :in => %w(sunday monday tuesday wednesday thursday friday saturday), :case_sensitive => false
end
Attualmente ho tutti i giorni in db tranne la domenica.Sto cercando di aggiungere "domenica" e ricevo errori "non è incluso nell'elenco".
Soluzione
validates_inclusion_of non ha un argomento case_sensitive, quindi puoi creare il tuo validatore (se stai usando 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
e salvalo nella tua directory lib come:
lib/day_format_validator.rb
Quindi nel tuo modello, puoi avere:
validates :day, :day_format => true
Assicurati solo che rails carichi questo file lib all'avvio inserendolo nel tuo config / application.rb:
config.autoload_paths += Dir["#{config.root}/lib/**/"]
Altri suggerimenti
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
Questo riduce il campo prima di eseguire la convalida
Una piccola soluzione semplice se non si è preoccupati di separare le convalide in 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow