Rails5.1.3でWebアプリケーション制作の勉強をしています。入力フォームにニックネームの入力欄があり重複禁止にしています。
重複した値を打ち込むとエラーになります。それを日本語で「ニックネームが他の顧客と重複しています。」と表示させたくて
以下のようにコードを記述しましたがエラーが発生してしまい解決できないので教えていただけませんでしょうか?
customer.ja.yml ja: activerecord: attributes: customer: email: メールアドレス password: パスワード family_name: 氏名(姓) given_name: 氏名(名) family_name_kana: フリガナ(姓) given_name_kana: フリガナ(名) nickname: ニックネーム sponsor1: 紹介者 birthday: 生年月日 gender: 性別 errors: models: customer: attributes: email: taken: が他の顧客と重複しています。 nickname: taken: が他の顧客と重複しています。 birthday: after_or_equal_to: には1900年1月1日以降の日付を指定してください。 before: が未来の日付です。
app/models/customer.rb class Customer < ActiveRecord::Base include EmailHolder include PersonalNameHolder include PasswordHolder include NicknameHolder ・ ・ ・
nickname_holder.rb module NicknameHolder extend ActiveSupport::Concern included do include StringNormalizer before_validation do self.nickname = normalize_as_nickname(nickname) end validates :nickname, presence: true, nickname: { allow_blank: true } validates :nickname, uniqueness: { allow_blank: true } after_validation do if errors.include?(:nickname) errors.add(:nickname, :taken) errore.delete(:nickname) end end end end
エラーの内容 ArgumentError in Staff::CustomersController#create Unknown validator: 'NicknameValidator' Extracted source (around line #11): 9 end 10 11 validates :nickname, presence: true, nickname: { allow_blank: true } 12 validates :nickname, uniqueness: { allow_blank: true } 13 14 after_validation do
メールアドレスの部分はちゃんと表示されるのですがニックネームが上手く動かないのです。
参考までにemailはこのようになっています。 email_holder.rb module EmailHolder extend ActiveSupport::Concern included do include StringNormalizer before_validation do self.email = normalize_as_email(email) self.email_for_index = email.downcase if email end validates :email, presence: true, email: { allow_blank: true } validates :email_for_index, uniqueness: { allow_blank: true } after_validation do if errors.include?(:email_for_index) errors.add(:email, :taken) errors.delete(:email_for_index) end end end end
どなたか教えていただけないでしょうか?宜しくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/04 15:50
退会済みユーザー
2017/12/05 00:42
2017/12/05 03:58
退会済みユーザー
2017/12/05 05:38