在after_save回调中使用`self`对象时出错

时间:2013-04-01 14:39:10

标签: ruby-on-rails ruby ruby-on-rails-3 conditional-statements

我有两张桌子:汽车

  • Person has_many cars
  • Car belongs_to person

我希望在汽车license_plate发生变化时向此人发送电子邮件。

我已成功制作邮件代码,但在if回调中设置after_save条件时遇到问题。

#Inside Person models
after_save :send_mail_notification, if: (self.cars.first.order('updated_at DESC').changed?)

def send_mail_notification(person)
    ...
end

我收到了这个错误

NoMethodError: undefined method `cars' for #<Class:0x4852ba8>

所以,我猜self在回调中无法使用?任何解决方案?

由于

2 个答案:

答案 0 :(得分:4)

after_save :send_mail_notification, if: Proc.new { |model| model.cars.order('updated_at DESC').first.changed? }

答案 1 :(得分:1)

将其移入方法?

after_save :send_mail_notification

def send_mail_notification(person)
    if (person.cars.first.order('updated_at DESC').changed?
      ..
    end
end