【问题标题】:Rails ActiveModel::Dirty in a formRails ActiveModel::Dirty 表单
【发布时间】:2014-05-01 13:19:42
【问题描述】:

当使用 Rails 表单更新布尔值(在我的情况下为 shipped)时,我如何检查是否已将其(特别)从 false 设置为 true,以便设置 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

需要检查这个条件,然后应该分配shipped_at(如果条件成立),然后显然应该保存对象。

我应该使用ActiveModel::Dirty 吗?我的控制器操作在一天结束时应该如何看待?

【问题讨论】:

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


    【解决方案1】:

    我认为这是模型订单本身的责任。

    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
    

    现在您无需更改控制器中的任何内容,如果您从另一段代码保存订单,则将始终设置 shipping_at 值。

    【讨论】:

      猜你喜欢
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      相关资源
      最近更新 更多