我想使用回调来检查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的错误。
据我了解你的问题,你可以使用find_or_create_by
来达到这个目的
provision = Provision.find_or_create_by(survey_id: self.survey_id, service_id: self.service_id)
provision.update(foo: bar)