Пользовательская проверка Rails (повторно используемый стиль макроса) - PullRequest
3 голосов
/ 13 марта 2011

Написание приложения на Rails. Я хотел бы сделать несколько более часто используемых проверок доступными для моих моделей. Я понимаю, как сделать встроенные проверки и как написать свои собственные методы. Однако я нахожу, что я использую одни и те же проверки в нескольких местах, и неудобно использовать миксины в разных классах.

Вот пример: у меня есть объект с prop1 и prop2. Любой из них действителен, но недействителен для установки обоих. Прямо сейчас у меня есть что-то вроде

class MyClass < ActiveRecord::Base 
  attr_accessor :prop1, :prop2
  validate :prop1_prop2_mutex

  def prop1_prop2_mutex 
     errors.add(:base, "Can not set prop1 and prop2") if prop1 && prop2
  end 
end

То, что я действительно хотел бы иметь, это что-то вроде

class MyClass < ActiveRecord::Base 
  attr_accessor :prop1, :prop2
  validate_mutex :prop1, :prop2
end 

а потом еще где-то, наверное, мне нужно что-то вроде

  def validate_mutex(property1, property2)
    rrors.add(:base, "Can not set prop1 and prop2") if self.send(property1) && self.send(property2)
  end

Это может быть не так близко.

Итак, как мне создать новый метод проверки многократного использования?
Или есть лучший способ решить эту проблему?

Пожалуйста, будьте общими. У меня есть несколько примеров этой проблемы в разных формах. Хотя я был бы признателен за очень простое встроенное решение для этого примера, у меня есть более сложные проверки, к которым я хотел бы применить решение.

1 Ответ

3 голосов
/ 13 марта 2011

Вы можете использовать пользовательские валидаторы API для таких вещей, как:

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