2011-09-15 3 views
0

:레일 3 : 개인적으로 미리 모델 변경 내가 여러 가지 다른 모델 중첩 바인드합니다을 허용하는 모델의 형태가

class Page < ActiveRecord::Base 

    belongs_to :user 
    has_many :images 
    has_many :videos 
    has_many :options 

    accepts_nested_attributes_for :images 
    accepts_nested_attributes_for :videos 
    accepts_nested_attributes_for :options 

    def active? 
    published # boolean field 
    end 

end 

내가 페이지 소유자 싶습니다 (사용자) 페이지를 편집 할 수 있도록 모델을 저장하지 않고도 변경 사항을 즉시 볼 수 있습니다 (모델을 공개적으로 볼 수 있음). 내 직감은 소유자가 복제본에 대한 변경 사항에 만족할 때까지 원본이 그대로 유지되도록 모든 관련 (예 :!)과 함께 페이지를 복제하는 것입니다.

더 현명하고 효율적인 해결책이 있습니까?

답변

-1

EDIT - 옵션 2 인 has_draft를 살펴본 후에 나는 100 % 그와 함께 할 것입니다.

옵션 1 -

당신은 세션에 데이터를 저장하고 적절하게 검색 할 수 있습니다

현재 3 가지 옵션이 있습니다.

2 옵션 - 당신은 당신의 모델 구조를 복제 등 새로운 테이블을 생성하고 당신을 위해 모두를 처리합니다 "has_draft"와 같은 초안 플러그인/보석을 사용할 수 있습니다

.

https://github.com/rubiety/has_draft

옵션 3 -

당신은 당신의 페이지를 복제 할 수 있습니다

,라는 페이지 모델에 새로운 필드를 추가 (이 정확히 작동하지만 내 추측입니다 있는지 확실하지 않습니다) "duplicate_of"및 편집 작업을 수행 할 때 원본 페이지의 ID에 복제 전달을 작성하십시오. 그런 다음 업데이트 작업에서 복제본인지 확인한 다음 복제본 인 경우 원본을 덮어 쓰고 복제본을 삭제합니다.

def edit 
    @original = User.find(params[:user_id]).pages.find(params[:id]) 
    @clone.duplicate_of = @original.id 
    @clone.active = false 
    @page = User.find(params[:user_id]).pages.create(@clone.attributes) 
    end 

    def update 
     #you will need to add something here to check if its a duplicate 
     #to begin with and if it is... 

     @page = User.find(params[:user_id]).pages.find(params[:id]) 
     @original = User.find(params[:user_id]).pages.find(@page.duplicate_of) 
     if @original.update_attributes(params[:page]) 
     @page.destroy 
     end 
    end