1

주문과 함께 특정 버전의 모델을 저장해야합니다. paper_trail 또는 vestal_versions 같은 버전 관리 보석을 사용할 계획입니다. 올바른 버전에 자동으로 주문을로드하고 싶습니다.belongs_to 특정 버전

이상적으로는 객체를 order.update_attributes(:stuff => bought_stuff)으로 저장하고 순서는 물건의 버전을 기억하므로 순차적로드로 인해 order.reload.stuff은 주문이 저장된 시점의 객체가됩니다.

이러한 기능을 제공 할 수있는 보석이 있습니까? 나는 하나를 찾을 수 없었다.

그렇지 않으면 어떻게 ActiveRecord 및 버전 젬을 사용하여이를 수행 할 수 있습니까?

답변

2

사실, 나는 PaperTrail이 함께 원하는 거의 달성 할 수 :

class Stuff < ActiveRecord::Base 
    has_paper_trail 
end 

class Order < ActiveRecord::Base 
    belongs_to :stuff 

    def stuff_with_version 
    stuff_without_version.version_at(created_at) if stuff_without_version 
    end 

    alias_method_chain :stuff, :version 
end 
0

이 확실하지 않음이 반드시 당신을위한 최고의 디자인,하지만 당신은 이것에 대한 paper_trail을 사용할 수 있습니다. 모델 클래스의 맨 위에 매크로 메소드 'has_paper_trail'을 추가하기 만하면 인스턴스가 변경 될 때마다 인스턴스의 직렬화 된 사본이 실제 모델로 다시 연결되는 다형성 관계와 함께 "버전"이라는 테이블에 작성됩니다.

'제품'의 특정 버전을 주문과 연관시키려는 경우 버전 테이블에 관계를 추가하는 것으로 시작하십시오. 즉, 주문에 'version_id'를 추가 한 다음 이전에 관계를 설정하십시오.

이렇게하면 주문에 제품을 추가 할 때 주문을 제품의 최신 버전으로 연결합니다. 제품을 검색하면 버전이 제거됩니다. 즉 주문을 만들 때의 제품이었습니다. 관계가 다른 방식으로 작동하도록하려면 (즉, 주문과 관련된 제품을 다시 연관시키는 것) 더 복잡 할 수 있지만 시작에 불과합니다.