title: Rails validations depending on the value that may be not present
body: <p>I've got a service object which has several validations that validate two params. Everything works fine until these params are "". In this case, even though I validate their presence, later validations raise errors. How can I make my code validate the presence first and then, only if the values are present, continue the validations?</p>
  
  <pre><code>class SubscriptionPause
    include ActiveModel::Model
    extend ActiveModel::Naming
  
    attr_accessor :paused_from, :paused_till, :params, :id
  
    validates :paused_from, presence: true, allow_nil: true
    validates :paused_till, presence: true, allow_nil: true
  
    validate :paused_from_cant_be_later_than_subscription_ends
    validate :paused_from_cant_be_in_the_past
    validate :paused_till_is_later_than_paused_from
  
    def initialize(params)
      @params = params
      @paused_form = params[:paused_from]
      @paused_till = params[:paused_till]
    end
  
    def create
      if valid?
        ...
      else
        ...
      end
    end
  
    private
  
    def subscription
      @subscription || Subscription.find(params[:id])
    end
  
    def paused_from_cant_be_in_the_past
      if !paused_from.empty? &amp;&amp; paused_from.to_date &lt; Date.today
        errors.add(:paused_from, I18n.t("..."))
      end
    end
  
    def paused_till_is_later_than_paused_from
      if paused_from &gt; paused_till
        errors.add :paused_from, I18n.t("...")
      end
    end
  
    def paused_from_cant_be_later_than_subscription_ends
      if !paused_from.empty? &amp;&amp; subscription.expire_date &lt; paused_from
        errors.add :paused_from, I18n.t("...")
      end
    end
  
  end
  </code></pre>