Frage

Hier ist Code, der nicht funktioniert

    class WeekDay < ActiveRecord::Base
           validates_inclusion_of :day, :in => %w(sunday monday tuesday wednesday thursday friday saturday), :case_sensitive => false
    end

Derzeit habe ich alle Tage in db außer Sonntag.Ich versuche, "Sonntag" hinzuzufügen, und es werden Fehler angezeigt, "ist nicht in der Liste enthalten".

War es hilfreich?

Lösung

validates_inclusion_of hat kein Argument für case_sensitive, sodass Sie Ihren eigenen Validator erstellen können (wenn Sie Rails 3 verwenden):

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

und speichern Sie dies in Ihrem lib-Verzeichnis als:

lib/day_format_validator.rb

Dann können Sie in Ihrem Modell Folgendes haben:

validates :day, :day_format => true

Stellen Sie einfach sicher, dass Rails diese lib-Datei beim Start lädt, indem Sie dies in Ihre config / application.rb: einfügen

config.autoload_paths += Dir["#{config.root}/lib/**/"]  

Andere Tipps

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

Dadurch wird das Feld vor dem Ausführen der Validierung verkleinert

Eine kleine einfache Lösung, wenn Sie sich keine Gedanken über die Trennung von Validierungen in lib machen möchten

    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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top