곧 : 지연 저장 (예 : m.delay_save!
)을위한 모델 인스턴스를 표시하고 한 번 호출 (예 : DelaysManager.commit!
)하여 모든 저장된 모델을 저장하는 표준 레일 기능이 있습니까?ActiveRecord에서 지연 저장
는 장황하게 :
은 사용 사례를 고려 내가 두 가지 방법으로 모델 X의 인스턴스를 갱신해야합니다
def f1
x = get_instance_of_x
x.a = 'A'
x.save!
end
def f2
x = get_instance_of_x
x.b = 'B'
x.save!
end
...
def g
f1
f2
end
문제는 여기에 g 두 번 X의 인스턴스를 절약 할 수 있다는 것입니다. 그리고 나는 그것을 한 번하고 싶다. save!
의 호출을 g 메소드로 이동할 수 있지만, 더 복잡한 경우 g는 저장할 오브젝트를 모를 수도 있습니다. 그래서 이것을 대신 다음과 같이 표시하고 싶습니다.
def f1
x = get_instance_of_x
x.a = 'A'
x.delay :save!
end
def f2
x = get_instance_of_x
x.b = 'B'
x.delay :save!
end
...
def g
f1
f2
DelaysManager.commit
end
class ActiveRecord::Base
def delay(*args)
DelaysManager.delay(self, *args)
end
end
class DelaysManager
@@delays = []
def self.delay(*args)
@@delays << args
end
def self.commit
@@delays.each { |object, *args| object.public_send(*args) }
@@delays.clear
end
end
샘플 구현 아이디어는 정확하게 배열 유지 관리를 자동화하는 것입니다. – Alexey
개체가 배열에 포함 된 횟수만큼 개체를 저장합니다. ActiveRecord 덕분에 변경 사항 만 저장되지만 같은 속성을 다른 곳에 겹쳐 쓰고 저장하기 전에 다른 곳을 검사하면 문제가 발생할 수 있습니다. 물론, 그것은 많은 데이터베이스 사용을 의미합니다. Mine은 조금 더 압축하고 저장하기 전에 변경된 값을 사용할 수 있습니다. 구현에 만족하면 귀하의 질문을 이해하지 못합니다. – Matzi