コメント モデルのカスタム検証を行いたい: 未登録ユーザーは、コメントを送信するときに、登録ユーザーの電子メールを使用しないでください。
カスタムバリデータークラスを配置しますapp/validators/validate_comment_email.rb
:
class ValidateCommentEmail < ActiveModel::Validator
def validate(record)
user_emails = User.pluck(:email)
if current_user.nil? && user_emails.include?(record.comment_author_email)
record.errors[:comment_author_email] << 'This e-mail is used by existing user.'
end
end
end
そして私のモデルファイルでapp/models/comment.rb
:
class Comment < ActiveRecord::Base
include ActiveModel::Validations
validates_with ValidateCommentEmail
...
end
問題は、私のcurrent_user
メソッドを使用することsessions_helper.rb
です:
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
バリデーターはこのメソッドを認識できません。Validator クラスに sessions_helper を含めることはできますが、Cookie メソッドに関するエラーが発生します。それはどこにも行かない道です。では、このカスタム検証レールを作成するにはどうすればよいでしょうか?