맞춤 유효성 검사기 편리했습니다 >_<

커스텀 밸리데이터란 밸리데이션을 취향에 커스터마이즈 할 수 버리는 것.



자신의 규칙을 만들 수 있습니다!

비망록으로서 일련의 흐름을 써 갑니다.
등록 폼에서 save시에 이 validator를 발동시킵니다.

유저가 은행 코드를 입력해, 그 코드가 Bank 테이블상에 존재하지 않으면 (그 코드에 일치하는 은행은 존재하지 않는다고 하는 내용의) 경고를 표시시키는 것 같은 이미지입니다.

new.html.slim

= form_for @bank_account do |f|

       = f.text_field :bank_code   #銀行コード
       = f.text_field :account_num #口座番号 物足りなかったので書いただけで特にカスタムバリデーターとは関係ないです

  = f.submit

그런 다음 사용자 정의 유효성 검사기의 본문을 만들고 정의합니다.



app/validators/bank_validator.rb라는 파일 만들기

app/validators/bank_validator.rb
class BankValidator < ActiveModel::EachValidator  #classはファイル名で
  def validate_each(record, attribute, value) #ここの引数たちはおまじないだと思って問題ない
    unless Bank.find_by(code: value) # 銀行のテーブルを参照しその中のcodeの値と受け取ったvalueを比較する => falseならバリデーター発動!!!!!
      record.errors[attribute] << (options[:message] || "は正しくありません") # ここも意味がわからなかったらコピペで全然おkです
    end
  end
end

참고로 인수들에게 무엇이 들어 있는지 확인해 보면
p record
=> BankAccount id: nil, bank_code: "aaaaa", created_at: nil, updated_at: nil>
p attribute
=> :bank_code
p value
=> "aaaaa"

이런 식으로 들어 있습니다!

마지막으로 모델 내 설정



presence: true는 알고 있다고 생각하지만, 뒤의 bank: true가 중요합니다.

bank_account.rb

class BankAccount < ApplicationRecord
  validates :bank_code,  presence: true, bank: true #ここの最後の部分でカスタムバリデーターを使いますよという合図 
end

bank_code를 aaaaa로 제출한 결과


할 수 있습니다!

참고 rails 가이드-validator

좋은 웹페이지 즐겨찾기