2010-06-14 110 views
1

我有一個模型與屬性id,名稱,價格的書。我有書的一個實例:如何複製或克隆模型?

b1 = Book.new 
b1.name = "Blah" 
b1.price = 12.5 
b1.save 

我想複製B1,創造產品型號的另一個實例。我是tryid p1 = b1.clone,然後是p1.save,但它不起作用。任何想法?

而且我的環境是:

  • 的Netbeans 6.9 RC2
  • 的JRuby 1.5.0

編輯: 我TemporaryProduct型號:

class Admin::TemporaryProduct < ActiveRecord::Base 

    def self.update_from_web_service(web_service_url) 
    response = HTTParty.get(web_service_url) 
    response["webServiceResult"]["product"].each do|element| 
     unless exists? :orignal_product_id => element['id'] 
     create!(
      :name => element['name'], 
      :price => element['price'], 
      :amount => element['amount'], 
      :description => element['description'], 
      :orignal_product_id => element['id'], 
      :image => element['image'], 
      :shop_account_number => element['shopAccountNumber'], 
      :unit => element['unit'] 
     ) 
     end 
    end 
    end 
end 

產品是創建行動:

def create 
    @temporary_products = Admin::TemporaryProduct.find_all_by_orignal_product_id(params[:product]) 
    @product = Admin::Product.new(@temporary_products.attributes) 
    # @product = @temporary_products.clone 
    respond_to do |format| 
     format.html { redirect_to(admin_products_url, :notice => 'Admin::Product was successfully created.') } 
    end 
    end 

我想將所有b1的屬性克隆到p1模型。

+0

在您發佈的'create'動作中,'@ temporary_products'將是一個'Admin :: TemporaryProduct'類型的對象數組。 'attributes'是一個單一實例的方法。我不清楚您是要克隆所有結果,還是僅僅一個,或者您是否期望'find_all_by_original_product_id'只返回1個結果。 – Chowlett 2010-06-14 11:43:59

+0

我不這麼認爲。它返回一個數組。 – Zeck 2010-06-14 12:01:08

+0

是的,我知道它返回一個數組。因此'@ temporary_products.attributes'將不起作用,因爲'.attributes'是*單​​個實例*的一種方法。你想克隆所有返回的臨時產品,還是隻有一個? – Chowlett 2010-06-14 12:38:00

回答

7

我想你想:

b2 = Book.create(b1.attributes) 

編輯: 鑑於你上面create行動,我想你想要做的是改變其開始@product

@temporary_products.each {|tp| Admin::Product.create(tp.attributes)} 

的行將爲每個TemporaryProduct對象創建一個新的Product對象,使用與TemporaryProduct相同的屬性。如果這不是你想要的,請告訴我。

+0

未找到b1.attributes函數! – Zeck 2010-06-14 10:29:37

+0

真的嗎?這很奇怪。你可以發佈班級書的代碼嗎? – Chowlett 2010-06-14 10:33:29

+0

b1 = Admin :: TemporaryProduct,p1 = Admin :: Product – Zeck 2010-06-14 10:49:14

0

如果沒有工作,您的意思是數據庫中沒有新的記錄,那麼您可能希望在保存之前將p1的id設置爲null。如果克隆與原始文件具有相同的id,那麼它看起來代表同一個對象。