我有一个属于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
并创建一个新的SapEvento
做SapEvento.new(params_operacao: last_evento_params_operacao)
并保存。它也没有给我任何错误......