rails _changed?表单更新后方法不起作用

时间:2013-11-10 23:48:17

标签: ruby-on-rails forms

我的更新功能中有以下代码。我看到数据在数据库中更新了,但'ship_date_changed?'函数不返回true。

def update
@order = Order.find(params[:id])
ship_date_changed = @order.ship_date_changed?

respond_to do |format|
  if @order.update(order_params)
    OrderNotifier.shipped(@order).deliver if ship_date_changed
    format.html { redirect_to @order, notice: "Your order has been updated" }
    format.json { head :no_content }
  else
    format.html { render action: 'edit' }
    format.json { render json: @order.errors, status: :unprocessable_entity }
  end
end
end

1 个答案:

答案 0 :(得分:0)

那是因为它没有改变。看看你做了什么:

@order = Order.find(params[:id])
ship_date_changed = @order.ship_date_changed?

您从数据库中获得订单并立即询问其发货日期是否已更改。不,它仍然与您从数据库中获得的记录完全相同!

您可能想要做的是略微改变操作顺序:

@order = Order.find(params[:id])
@order.attributes = order_params
ship_date_changed = @order.ship_date_changed?

respond_to do |format|
  if @order.save(order_params)
  OrderNotifier.shipped(@order).deliver if ship_date_changed