У меня есть две модели Customer и Referal.Оба имеют атрибут электронной почты.Реферал принадлежит Заказчику, а Заказчик has_many Рефералов.
Когда я создаю / обновляю Реферала, я хочу проверить, что электронная почта на Реферале не совпадает с электронной почтой на объекте Клиента (родителя).
Вотмой реферальный объект: (вырезать ненужные вещи)
class Referal < ActiveRecord::Base
belongs_to :user
belongs_to :customer
validates :name, :presence => true
validates :email, :presence => true
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create
validate :email_cannot_equal_referers
def email_cannot_equal_referers
if email == customer.email
errors.add(:email, "can't be the same as referer's")
end
end
end
Вот клиент:
class Customer < ActiveRecord::Base
has_many :referals
validates_presence_of :name, :email
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :allow_blank => true
end
Когда я пытаюсь сохранить реферала, я получаю "неопределенный метод` email 'для nil: NilClass ", который относится к customer.email, как это работает, когда я помещаю электронную почту == email.На данный момент Referal еще не записан в базу данных, хотя customer_id, кажется, установлен, как я могу использовать его в сообщении об ошибке (с .to_s), но он также не работает, чтобы использовать это для поиска объекта Customer с помощьюCustomer.find (customer_id).(Невозможно найти клиента без идентификатора)
Для полноты здесь приведен бит контроллера, который вызывает метод сохранения на Referal:
@refer=Referal.new
@refer.name=params[:Name2]
@refer.email=params[:Email2]
@refer.message=params[:Message]
@customer.referals << @refer
if @refer.save
CustomerMailer.refer(@refer).deliver
CustomerMailer.refer_thanks(@refer).deliver
else
render 'new_refer'
end
Был бы очень признателен за указатели для этой работы!Спасибо