在名为closed_date的订单中有一列,这是一个DateTime字段。
使用Dirty。试图做if self.closed_date_changed?
但它不起作用。我是否必须使用日期时间字段来跟踪更改?
EDIT 使用Rails 3.0.3,Ruby 1.9.2p136
订单控制器中的代码
def update
@order = Order.find(params[:id])
if @order.update_attributes(params[:order])
@order.close_order
end
end
end
在模型中
include ActiveModel::Dirty
def close_order
if self.closed?
if self.closed_date_changed?
self.items.each do |item|
item.update_attribute(:created_at, self.closed_date)
end
end
else
self.update_attributes(:closed_date => Time.now, :closed => true)
self.items.each do |item|
item.update_attribute(:created_at => Time.now)
item.schedule_any_tasks
end
end
end
end
答案 0 :(得分:2)
我认为你的意思是:
def save_changes
if closed_date_changed?
# do something like save the modified data to a table
else
# do anything else
end
end
最重要的是,不要忘记在before_save(update)回调中调用此方法。
因为仅在未保存实际记录时仍保留更改。
希望它有所帮助!
答案 1 :(得分:0)
def start_date_changed?
return true if self.start_date != self.start_date_was
return false
end
我使用是来检查值的变化..
感谢名单