Rails получает доступ к общей пользовательской проверке в модуле в модели - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь выяснить, как создать общую пользовательскую проверку, которую я могу использовать в своих моделях, которые я поместил в папку lib / validations.rb.

module Validations
  extend ActiveSupport::Concern

  # included do


  def email_format_validation
    if self.email.present?
      if !validates_format_of :email, with: email_regex
        self.errors.add(:email, "doesn't exist")
      end
    end
  end


  def email_regex
    /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
  end
end

Так что в моей модели это позволяет мне:

validate :email_format_validation

В других моделях я пытаюсь просто позвонить email_regex:

validate :user_email, with: email_regex

, который выдает следующую ошибку:

undefined local variable or method `email_regex' for #<Class....>

Я попытался использовать include Validations, extend Validations, require 'validations' и т. Д. В моей модели, но безуспешно.Я также попытался поместить методы модуля в class << self, используя блок included do, установив методы как self.email_regex и вызвав Validations.email_regex, и все же, похоже, ничего не работает.

Ответы [ 2 ]

2 голосов
/ 10 апреля 2019

Я попробовал следующее, и у меня это сработало:

Создано validations.rb в моделях / проблемах

module Validations
  extend ActiveSupport::Concern

  def email_format_validation
    if self.email.present?
      if !validates_format_of :email, with: email_regex
        self.errors.add(:email, "doesn't exist")
      end
    end
  end


  def email_regex
    /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
  end
end

В модели:

include Validations

class User < ApplicationRecord
  validate :email_format_validation
  validates :user_email, with: :email_regex
end

user_email - это имя поля

0 голосов
/ 09 апреля 2019

Вы пытались использовать require_relative Validations

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...