2017-02-15 2 views
4

Я пытаюсь добавить специальные валидаторы электронной почты для своего приложения; Однако, где я должен разместить пользовательский валидатор? (Я действительно не хочу размещать этот класс проверки в модели) Есть ли генератор cli для валидатора?Где я могу поместить пользовательские валидаторы в Rails 5?

http://guides.rubyonrails.org/active_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 

Что условность местоположение/путь для валидатора?

ответ

9

Я положил их в /app/validators/email_validator.rb, и валидатор будет загружен автоматически.

Кроме того, я не знаю, было ли это ваше дело, но вы должны заменить его в своей форме. Если это так, первая проверка выполняется до того, как пользователь достигнет вашего контроллера.

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

By:

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

является то, что соглашение в рельсах? и будет ли он загружен автоматически? –

+0

По-видимому [SO: 5263239] (http://stackoverflow.com/questions/5263239/where-should-rails-3-custom-validators-be-stored), [SO: 35953656] (http://stackoverflow.com/questions/35953656/where-exact-do-i-put-autoload-path-for-custom-validator-in-config-application) – devoh

+0

Спасибо за дополнительную информацию. Я использую api только рельсы. : D –

1

Мой валидатор не загружается автоматически. По крайней мере, не отображается, когда я ввожу в консоли:

> ActiveSupport::Dependencies.autoload_paths 

Итак, я ставлю в моей конфигурации/application.rb, эту строку:

config.autoload_paths += %W["#{config.root}/lib/validators/"] 
+1

'lib /' папки не загружаются автоматически. Они удалили lib autoload из рельсов. 5. Вам следует создать эту папку и разместить там валидаторы. 'app/validators /' Затем они будут автоматически загружены, поэтому вам не нужно делать какие-либо настройки в config.autoload_paths. – zhisme

Смежные вопросы