2011-09-15 16 views
0

私はいくつかの他のモデルのためのネストされたattrsにを受け入れるモデルの形式があります。のRails 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 

を私はページを編集できるようにするには、ページ所有者(ユーザー)を希望しますそのネストされたattrsを削除し、モデルを保存する必要なくすぐにその変更を確認します(これにより、モデルが一般に表示されるようになります)。私の嫌な反応は、オーナーがクローンへの変更に満足するまで元のままに留まるように、ページをすべての関連付け(yikes!)と共に複製することです。

もっと賢明で効率的なソリューションはありますか?

答えて

-1

EDIT - オプション2であるhas_draftを調べた後、私は100%そのことに行きます。

オプション1 -

あなたがセッションにデータを保存し、それに応じてそれを取得することができます。

あなたはここに3つのオプションがあります。あなたは、あなたのモデル構造を複製し、新しいテーブルを作成するなど、あなたのためにそれのすべてを処理する「has_draft」などの案プラグイン/宝石を使用することができます

-

オプション2。

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 
関連する問題