2013-10-10 47 views
1

在我的控制器我有一個@attach對象,當我檢查它,它所以現在一些手術後,我需要創建一個具有值提取物在Rails 2.3

[#<MessageAddlAttachment id: 80, reminder_id: 112, msg_attachment_file_name: "24.png", msg_attachment_content_type: "image/png", msg_attachment_file_size: 272368, created_at: "2013-10-10 12:04:37", updated_at: "2013-10-10 12:04:37">, #<MessageAddlAttachment id: 81, reminder_id: 112, msg_attachment_file_name: "37.png", msg_attachment_content_type: "image/png", msg_attachment_file_size: 333986, created_at: "2013-10-10 12:04:37", updated_at: "2013-10-10 12:04:37">] 

從一個ActiveRecord查詢對象的屬性值在此MessageAddlAttachment表中輸入不同的ID。我該如何實現它。我嘗試過dup,但它會有相同的ID。請幫助

回答

2

dup是你在鐵軌4.朋友它將創建一個副本,但刪除的id值:

u = User.first 
=> #<User id: 1, ...> 
u.dup 
=> #<User id: nil, ...> 
u.dup.save 
    (0.2ms) begin transaction 
... 
1

開始無論是軌3.2或3.1,您要使用dup。在此之前,您應該使用clone。這將爲您提供id字段的新值;你可能要注意你的created_at和updated_at字段發生了什麼。

另一個值得注意的問題是,如果您有任何帶有驗證的日期字段,表示它們必須在「今天的日期」之後,那麼當原始記錄被保存時它們可能有效,但是當新記錄被保存時它們可能是有效的。你如何解決這個問題將取決於你的情況;您可能希望在克隆時完全禁用驗證,或者調整新記錄中的值。

+0

我使用了克隆方法,但是如何避免created_at和updated_at屬性被克隆並將其保存爲正確的值 – rubyist

+0

在我的情況下,我希望記錄具有原始的created_at值,因此可能是您所看到的。如果您希望更新它們,您可能必須將.created_at明確設置爲Time.now並保存該記錄,該記錄應該爲您更新.updated_at字段。 – sockmonk