2012-05-08 96 views
1

如果我有保存在數據庫中的記錄A,那麼我想用新創建的記錄B替換它,其中尚未保存。因此B可以保存在數據庫中,但是A的ID(A被替換)。這可能在Rails活動記錄?用新創建但尚未保存的記錄替換現有記錄

P.S.這背後的原因是我需要通過一些條件來合併對象,並且構建對象需要一些互聯網抓取/解析。所以,如果使用時間解析BI要防止再次解析它爲A,但用B替換它

回答

2

你可以做這樣的事情:

a = A.find(1) 
b = B.new 

# Modify b 

a.update_attributes(b.attributes.delete_if{ |k,v| %w(id created_at updated_at).include?(k) }) 
+0

這個答案只是更完整一點(created_at不會是零)。謝謝! – lulalala

+0

由於您正在從新建複製參數,未保存的記錄'created_at'和'update_at'尚未填充。 –

+0

@MikhailNikalyukin,我想到了和你一樣的解決方案,但是當我在控制檯中嘗試時,我得到了一個'Can not mass-assign protected attributes:id,created_at,updated_at'錯誤。這就是我刪除這些屬性的原因。 – Mischa

2

嘗試是這樣的(沒有測試此代碼):

a = Model.find(params[:id]) 
b = Model.new(params) 
a.update_attributes(b.attributes) 
相關問題