使用Active_record更改检测脏:在@ example.update(model_params)之前?

时间:2014-06-18 03:41:51

标签: ruby-on-rails ruby

我无法让脏模块工作。

我的方法在控制器中启动,在调用更新操作之前,我想查看模型是否已更改。像这样:

def update  
 respond_to do |format|
  #If the zipcode changes on an update - reset shipping options       
  if @order_preview.zip_different?
    if @order_preview.update(order_preview_params) 
      #Do Something
    ...
    end

  #if the zipcode doesn't change on update - assume only cart contents were altered
  else
     if @order_preview.update(order_preview_params) 
     #Do something else

     ...
     end
  end     
end

zip_different模型如下所示:

def zip_different?
    self.zip_changed?
end

看起来很直接,但每次都会返回false。 我是否必须在我想到的@order_preview.update(order_preview_params) 之后进行检查,否则持久性将会丢失。

1 个答案:

答案 0 :(得分:4)

在检查脏状态之前,您需要从参数设置模型属性:

@order_preview.attributes = order_preview_params

if @order_preview.zip_changed?
  ...
else
  ...

if @order_preview.save
  ...
else
  ...