代码之家  ›  专栏  ›  技术社区  ›  ccoeder

如何验证列可以更新一次?

  •  2
  • ccoeder  · 技术社区  · 7 年前

    我有一个协议模型,它有一个 released_at 列。我想验证协议是否可以发布 曾经。 我该怎么做?

    控制器:

     # GET /aggreements/1/release
     def release
       @agreement.update(released_at: Time.now.utc)
    
       if @agreement.save
         render json: {success: ["Agreement released."]}
       else
         render json: @agreement.errors, status: :unprocessable_entity
       end
     end    
    

    模型:

    class Agreement < ApplicationRecord
      validate :released_agreement_cannot_be_released
    
      def released_agreement_cannot_be_released
        if released_at.present?
          errors.add(:released_at, "already released")
        end
      end
    end
    

    谢谢您。

    1 回复  |  直到 7 年前
        1
  •  0
  •   ccoeder    7 年前

    我已经知道了,这是解决办法。

    控制器:

     # GET /agreements/1/release
     def release
       @agreement.released_at = Time.now.utc
    
       if @agreement.save
         render json: {success: ["Agreement released."]}
       else
         render json: @agreement.errors, status: :unprocessable_entity
       end
     end    
    

    模型:

    class Agreement < ApplicationRecord
      validate :released_agreement_cannot_be_released
    
      def released_agreement_cannot_be_released
        if released_at_was.present?
          errors.add(:released_at, "already released")
        end
      end
    end