rails 3: при создании, как мне проверить поле формы «код реферала» с помощью специального метода, который проверяет, существует ли код реферала в другой таблице? - PullRequest
1 голос
/ 12 июня 2011

Вероятно, это простой вопрос проверки, но у меня есть только опыт работы со встроенными помощниками проверки рельсов, такими как разрешение поля быть пустым и / или принудительное задание определенной длины или соответствие регулярному выражению.

Когда пользователь регистрирует (используя Devise), моя форма регистрации (и схема «Пользователи») также имеет поле «refer_by», в которое они могут ввести код реферала (например, идентификатор торгового представителя).

The 'Поле "refer_by" нуждается в специальной проверке перед сохранением: * удалите все пробелы * используйте нижний регистр * убедитесь, что это допустимое значение "кода ссылки" (существует в поле "code" таблицы ReferralCodes)

Если этодопустимое значение (например, не существует в таблице ReferralCode). Мне нужно пометить ошибку проверки в форме, например «Это неверный код реферала»

Я не знаю, куда поместить метод для выполнения.поэтому он запускается автоматически как часть проверки рельсов при попытке сохранить данные ...

Любая помощь будет признательна!

1 Ответ

2 голосов
/ 12 июня 2011

Вам нужен пользовательский валидатор с некоторой обработкой данных в модели.

app / models / user.rb:

class User < ActiveRecord::Base
  validates_with ReferralValidator

  before_save :clean_referral

  def clean_referral
    self.referred_by = self.referred_by.strip.lowercase
  end

end

app / lib / validators / referral_validator.rb:

class ReferralValidator < ActiveModel::Validator
  def validate(record)
    record.errors[:base] << "#{record.referred_by} is not a valid referral code" unless referral_code_valid?
  end
end

Вам нужно будет определить referral_code_valid?используя любую логику, которую вы бы хотели классифицировать как реферальный код, и убедитесь, что вы добавили автозагрузку каталога lib в вашу конфигурацию.Вы можете использовать следующее в config / application.rb:

config.autoload_path += %W({config.root}/lib)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...