Validação do modelo Rails: eu preciso validates_inclusion_of com distinção entre maiúsculas e minúsculas falso?
-
29-10-2019 - |
Pergunta
Aqui está o código que não está funcionando
class WeekDay < ActiveRecord::Base
validates_inclusion_of :day, :in => %w(sunday monday tuesday wednesday thursday friday saturday), :case_sensitive => false
end
Atualmente, tenho todos os dias no banco de dados, exceto domingo.Estou tentando adicionar "Domingo" e recebendo erros "não está incluído na lista".
Solução
validates_inclusion_of não tem um argumento case_sensitive, então você pode criar seu próprio validador (se você estiver 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 salve no seu diretório lib como:
lib/day_format_validator.rb
Então, em seu modelo, você pode ter:
validates :day, :day_format => true
Apenas certifique-se de que o rails carregue este arquivo lib na inicialização, colocando-o em seu config / application.rb:
config.autoload_paths += Dir["#{config.root}/lib/**/"]
Outras dicas
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
Isso diminui o valor do campo antes de executar a validação
Uma solução um pouco simples se você não estiver preocupado em separar as validações em 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow