Rails устанавливает ИЛИ условия в validate_presence_of в модели? - PullRequest
1 голос
/ 03 июня 2010

В модели рельсов можно сделать что-то вроде

class Example < ActiveRecord::Base
  #associations  

  validates_presence_of :item_id, (:user_id OR :user_email)

  #functions
end

Где модель имеет 3 столбца: :item_id, :user_id и :user_email? Я хочу, чтобы модель была действительной, пока у меня есть :user_id или :user_email.

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

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

Ответы [ 2 ]

1 голос
/ 03 июня 2010

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

class Example < ActiveRecord::Base

  validates_presence_of :referral

  def referral
    user_id || user_email
  end
end

или вы можете просто создать пользовательский метод проверки validate. См. Пользовательские проверки в Rails API

Если и user_id, и user_email принадлежат другой модели, возможно, вместо этого лучше добавить ассоциацию

class Example
  belongs_to :user
  validates_associated :user

  before_validate :build_user_from_id_or_email

  def build_user_from_id_or_email
    # ... Find something with the parameters
  end
end
0 голосов
/ 03 июня 2010
validates_presence_of :item_id
validates_presence_of :user_id,    :if => Proc.new{ |x| x.user_email.blank? }
validates_presence_of :user_email, :if => Proc.new{ |x| x.user_id.blank? }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...