2011-09-15 12 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,并立即看到这些变化,而不需要保存模型(这会使其公开可见)。我的直觉反应是克隆页面及其所有关联(yike!),以便原件保持不变,直到拥有者对克隆的更改感到满意为止。

是否有更合理或有效的解决方案?

回答

-1

编辑 - 在调查has_draft这是选项2后 - 我会100%与那。

你有3个选择这里:

选项1 -

您可以将数据保存到一个会话,并相应地检索。

选择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