Rails ActiveModel ::表单中的脏

时间:2014-03-24 09:12:52

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

当使用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吗?我的控制器动作应该如何看待当天结束?

1 个答案:

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