0

제품이라는 모델이 있습니다.콜백에 모델이 있는지 테스트하고, 업데이트하면 그렇지 않습니다.

p = Product.new(...) and p.save

나는 다음 acomplish 싶어요 :

같은 ID를 가진 다른 제품이있는 경우 (PK되지 않음), 우리 제품을 업데이트, 다른 우리는 새로운 하나를 만들 수 있습니다.

콜백 before_save 어쩌면 가능하다고 생각하십니까?

가 나는 속성이 업데이트됩니다, 그것은 새로운 모델이 만들어지지 않습니다 것을 의미 false를 반환,하지만 난 DB를 업데이트하기 때문에 롤백 생각이 시점에서,이

before_save :try, on: :create 

def try 
    p = Product.where(id: self.id).first 
    p and p.update_attributes(...) and return false 
    *1 
end 

* 1처럼 tryied 저장되지 않습니다.

답변

3

find_or_create (또는 find_or_initialize)을 사용하여 인스턴스 만 초기화하고 저장하지 않을 수 있습니다.

또한 예외가 아닌 nil을 반환하는 메서드를 시도하기 때문에 이미 try이라는 메서드를 만들지 않습니다. 예를 들어

:

Product.find_or_create(self.id) 
1

나는 upsert을 사용합니다.

ActiveRecord에는이 명령이 없습니다. Here은 이러한 동작을 구현하는 해답입니다.