我有两个不同的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'来实现我的想法吗?
感谢
答案 0 :(得分:0)
after_create:delete_booking,:if => Proc.new {| rental | rental.booking_no.present? }
答案 1 :(得分: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上触发回调,则使用update_attribute
(触发回调,不触发验证检查)或update_attributes
,这将为用户保存验证检查和回调。