MySQL에는 INSERT
문에 대한 매우 유용한 옵션이 있습니다. 이것은 id
열이없는 조인 테이블에 특히 유용합니다. 레코드를 삽입하지만 키가 기존 레코드와 충돌하는 경우 오류를 던지는 대신 해당 레코드가 업데이트됩니다. 예를 들면 다음과 같습니다.저장된 레코드에 동일한 키가 있으면 기존 레코드를 업데이트하는 방법은 무엇입니까?
INSERT INTO table (key1,key2,data) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE data=3;
액티브 레코드와 동일한 방법은? 생성 된 코드는 다음과 같을 것이다 : 그
class Model < ActiveRecord::Base
belongs_to :key1
belongs_to :key2
end
record = Model.new
record.key1 = key1
record.key2 = key2
record.data = 'new data'
record.WHAT? #Inserts or updates `data` for the existing record
귀하의 솔루션은별로 효과가 없습니다. 'save'가 실패하면 주목할만한 크기의 트랜잭션을 롤백 할 수 있으며 데이터를 다시로드해야합니다. MySQL에 관해서는, 미안, 문제가 해결되었습니다. –
'find' 자체는'AR :: RecordNotFound'를 리턴하지만'find_by_ *'는'nil'을 리턴합니다. – theIV