2017-02-15 13 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> 

で:

<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-exactly-do-i-put-autoload-path-for-custom-valid-in-config-application) – devoh

+0

追加情報ありがとうございます。私はAPIのみのレールを使用しています。 :D –

1

私のバリデータは自動的に読み込まれませんでした。

> ActiveSupport::Dependencies.autoload_paths 

だから、私は、私のconfig/application.rbにこのライン入れる:私は、コンソールで入力するときに、少なくとも表示されていない

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

'lib /'フォルダは自動ロードされません。彼らはレール5からlib自動ロードを削除しました。 このフォルダを作成し、そこでバリデータを配置してください。 'app/validators /' これらは自動的にロードされるので、config.autoload_pathsで設定を行う必要はありません。 – zhisme

関連する問題