2

我有两个不同的 after_create 回调。我只希望在创建的记录中存在字段时运行一个

我知道该怎么做,但我不太明白语法

#rental.rb
after_create :delete_booking , :if => ":booking_no = 'NOT NULL'"
after_create :set_requires_allocation


 def delete_booking
  @booking = Booking.where(:booking_no => self.booking_no).first
 @booking.destroy
end

def set_requires_allocation
self.user.requires_allocation = 'false'
end

set_requires_allocation 也将通过在 users 表中将“true”更改为“false”来实际实现我认为的效果吗?

谢谢

4

2 回答 2

0

after_create :delete_booking, :if => Proc.new { |rental| Rental.booking_no.present?}

于 2012-12-10T03:24:11.137 回答
0

由于您有两个after_create回调,您可以将它们组合成一行:

after_create :delete_booking, :set_requires_allocation, :if => Proc.new {|r| r.booking_no.present?}

如果您希望在set_requires_allocation回调中也更新关联的用户,那么您可能需要执行以下操作:

def set_requires_allocation
   user.update_column(:requires_allocation, false)
end

只是将属性设置为 false,并不会真正保存用户记录。我选择了update_column,因为这将阻止触发 User 模型上的任何回调或验证。如果您确实想在 User 上触发回调,请使用update_attribute(触发回调,不触发验证检查) 或update_attributes,这将为用户保存验证检查和回调。

于 2012-12-10T03:33:40.110 回答