检测重复和更新,而不是使用accepts_nested_attributes_for创建

问题描述 投票:0回答:1

我想使用回调来检查accepts_nested_attributes_for params以查找任何重复记录,并在满足条件时更新而不是create。

这可能吗?

我尝试过的:

before_validation :update_instead

  def update_instead
    unless self.id
      existing_provision = Provision.where(survey_id: self.survey_id).where(service_id: self.service_id).first
      if existing_provision
        self.id = existing_provision.id
      end  
    end
  end

这不起作用,因为它只是尝试创建一个id设置的记录,这显然会触发重复id的错误。

ruby-on-rails
1个回答
0
投票

据我了解你的问题,你可以使用find_or_create_by来达到这个目的

provision = Provision.find_or_create_by(survey_id: self.survey_id, service_id: self.service_id)
provision.update(foo: bar)
© www.soinside.com 2019 - 2024. All rights reserved.