铁路脏和日期变化

时间:2011-04-07 13:01:15

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

在名为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

2 个答案:

答案 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

我使用来检查值的变化..

感谢名单