Rails5.1.3でWebアプリケーション制作の勉強をしています。
現在、以下のようにsponsor1カラムにバリデーションをかけています。
開発中はseedデータ投入時にはバリデーションをかけないで投入すれば学習は進められますが、
本番環境では最初はカラム値が空なのでエラーになってしまいます。それで、2つの値だけはバリデーションに
ひっかっからないようにしたいのですが、よくわかりませんので教えてください。
現状
validates :sponsor1, exists: true
exists_validator.rb class ExistsValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) model = record.class unless model.where(attribute.to_sym => value).count > 0 record.errors.add(attribute, 'のニックネームが存在しないニックネームです。') end end end
現状だとカラムに何もデータが入っていないと全てエラーになってしまいます。
このバリデーションで「"sss"と"xxx"」の2つの値は受け付けます。のような指定はできるのでしょうか?
たとえばこんな感じで条件分岐で上の2つの値の場合はスキップして受け付けるようにです。
exists_validator.rb class ExistsValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) if sponsor1 == [ "sss", "xxx" ] ------------------追加 else -------------------------------------------追加 model = record.class unless model.where(attribute.to_sym => value).count > 0 record.errors.add(attribute, 'のニックネームが存在しないニックネームです。') end ------------------------------------------追加 end end end
できるとしてももっとスマートな記述方法があるような感じがしますが、どなたか教えていただけないでしょうか?
初心者なのでよくわかりません。宜しくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/01 04:12
2018/01/01 04:20
2018/01/01 04:28