Rails唯一性验证失败

时间:2016-07-14 14:57:51

标签: ruby-on-rails activerecord

我有一个属于SapEvento模型的SapIntegracao模型。在SapEvento上,我有以下验证:

  validates :params_operacao, uniqueness: true, if: :check_params

  def check_params
    self.sap_integracao_log.recebimento
  end

我这样做是为了防止对soap集成的重复请求(有时多次出现相同的xml)。所以我收到的params保存在:params_operacao属性,作为字符串。但问题是保存的验证。当我收到XML并通过执行

创建SapEvento对象时
evento_erro = sap_integracao_log.sap_eventos.create(
        evento_tipo: SapEvento.get_evento_tipo("Erro na Integração"),
        params_operacao: params.to_s,
        erro_descricao: (!transporte ? "Transporte não encontrado" : erro),
        reenviado: false,
        operacao: operacao
      )

它不会验证并允许创建另一个对象,即使已存在具有相同的对象:params_operacao值。

我在check_params方法上进行了调试:

logger.debug "recebimento #{self.sap_integracao_log.recebimento}"
logger.debug "count #{SapEvento.where(params_operacao: self.params_operacao).count}"

recebimento为真且计数大于0 ......所以它不应该允许,对吗?

我还尝试了一些其他语法,例如:

validates :params_operacao, uniqueness: true, if: "self.sap_integracao_log.recebimento"

但这些都没有奏效。有什么想法吗?

编辑: 我还尝试在控制台上取最后一个SapEvento.params_operacao并创建一个新的SapEventoSapEvento.new(params_operacao: last_evento_params_operacao)并保存。它也没有给我任何错误......

0 个答案:

没有答案