Próbuję dodać e-mail walidatory niestandardowe dla mojej aplikacji; Jednak gdzie powinienem umieścić niestandardowy walidator? (Naprawdę nie chcę umieścić tej klasy walidatora wewnątrz modelu) Czy jest generator CLI dla walidatora?

http://guides.Rubyonrails.org/aktywne_record_validations.html.

class EmailValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
      record.errors[attribute] << (options[:message] || "is not an email")
    end
  end
end

class Person < ApplicationRecord
  validates :email, presence: true, email: true
end

Jaka jest lokalizacja / ścieżka konwencji dla Custom Validator?

23
X.Creates 15 luty 2017, 18:05

3 odpowiedzi

Najlepsza odpowiedź

Włożyłem je w /app/validators/email_validator.rb, a walidator zostanie załadowany automatycznie.

Ponadto nie wiem, czy to twoja sprawa, ale powinieneś zastąpić to w formularzu. Jeśli tak, pierwsze walidacja zostanie wykonana przed osiągnięciem użytkownika kontrolera.

  <div class="field">
    <%= f.label :email %>
    <%= f.text_field :email, required: true %>
  </div>

Przez :

  <div class="field">
    <%= f.label :email %>
    <%= f.email_field :email, required: true %>
  </div>
25
devoh 15 luty 2017, 15:18

Mój walidator nie został załadowany automatycznie. Przynajmniej nie pokazuje, kiedy wpisuję konsolę:

> ActiveSupport::Dependencies.autoload_paths

Więc umieściłem w mojej konfiguracji / aplikacji.RB, ta linia:

config.autoload_paths += %W["#{config.root}/lib/validators/"]
1
Cleber Reizen 26 wrzesień 2017, 21:43

W szynach 6 musiałem umieścić je w /app/models/concerns dla nich autoload

0
PlatypusMaximus 26 czerwiec 2020, 17:18