Ответ 1
Похоже, вы должны абстрагировать пользователя и контакты на две таблицы вместо того, чтобы пытаться объединить их в один. Хотя контакты могут стать пользователями, это не значит, что они будут (я думаю?).
Это также решит ваш вопрос validate_presence_of :email
, так как в таблице контактов/модели даже не будет поля. Полагаю, это также облегчит потенциальные проблемы с производительностью. Вы не хотите, чтобы у вас было много контактов, чтобы найти зарегистрированного пользователя.
Если вы мертвы, сделав это в одной таблице, я считаю, что вы можете сделать что-то вроде следующего:
validates_presence_of :email, :unless => Proc.new {|user| user.type == "Contact"}
Предполагается, что у вас есть столбец user_type, но вы можете его заменить, в зависимости от того, как вы определяете, является ли User
Contact
.
Обновление
Вот как вы правильно проверили модели: Удалите validates_presence_of
из модели и поместите ее внутри этого блока:
with_options :unless => :user_type == "contact" do |user|
user.validates_presence_of :email
end