当使用rails表单来更新布尔值(在我的情况下为shipped
)时,我如何检查是否已将其设置(特别是)从false设置为true,以便设置{{ 1}}变量?
目前,我的更新操作如下所示:
shipped_at
需要检查此条件,然后应分配 def update
@order = @current_shop.orders.find(params[:id])
if @order.update_attributes(params[:order])
redirect_to edit_admin_shop_order_path(@current_shop, @order), notice: 'Order was successfully updated.'
else
render action: "edit"
end
end
(如果条件成立),然后显然应保存该对象。
我应该使用ActiveModel::Dirty吗?我的控制器动作应该如何看待当天结束?
答案 0 :(得分:2)
我认为这是订单本身的责任。
class Order < ActiveRecord::Base
before_update :set_shipped_at
def set_shipped_at
if self.shipped_was == false && self.shipped == true
self.shipped_at = Time.now
end
end
end
现在您不需要更改控制器中的任何内容,如果您从另一段代码中保存订单,则始终会设置shipped_at值。