2017-02-27 143 views
2

我想使用一些現有的記錄在我的mysql數據庫中創建一些記錄。我使用的軌道4.2從軌道中的另一個對象創建一個對象

這是在我的控制器的relevat代碼:

linkconfig_id = 17 
new_config = Linkconfigdetail.where(:linkconfig_id => user_params[:linkconfig_id]) 

new_config.each do |config| 
    config[:linkconfig_id] = linkconfig_id 
    config[:id] = nil 
    config[:created_at] = nil 
    config[:updated_at] = nil 
end 

Linkconfigdetail.create(new_config) 

的NEW_CONFIG變量包含Linkconfigdetail模型的幾個數據集。我想稍微改變它們,然後將它們保存爲新的,但我得到的錯誤信息:

ArgumentError (When assigning attributes, you must pass a hash as an argument.): 

和create-method的行。

我已經檢查過。 new_config-array不是零。它看起來像這樣,以前創建(使用檢查):

#<ActiveRecord::Relation [#<Linkconfigdetail id: nil, linkconfig_id: 17, link_id: 1, location: 0, created_at: nil, updated_at: nil>, #<Linkconfigdetail id: nil, linkconfig_id: 17, link_id: 18, location: 1, created_at: nil, updated_at: nil>, #<Linkconfigdetail id: ... 

我欣賞每一個暗示,或任何其他辦法解決這個問題一般。我無法想象,這是如此困難。即使更改數據集,我也有很多問題。許多方法,如刪除沒有工作,但我終於找不到解決此問題的方法。

回答

4

你不可錯過的一個關係或其他情況不create哈希值。相反,你可以複製原,創建一個新的實例不作爲原始值相同(除idcreated_atupdated_at屬性)堅持和改變你之前所需的屬性保存

,你可以這樣做:

linkconfig_id = 17 
configs = Linkconfigdetail.where(:linkconfig_id => user_params[:linkconfig_id]) 

configs.each do |config| 
    new_config = config.deep_dup 
    new_config.link_config_id = linkconfig_id 

    new_config.save 
end 
+1

有一個小錯字:它是「linkconfig_id」而不是「link_config_id」。但除此之外,它像一個魅力。非常感謝,你爲我節省了很多時間。 –

+0

不客氣 – cefigueiredo

2

你傳遞一個對象create,而應該是一個散列(但嘿,它到底是什麼錯誤說,是不是;?))

因此,要獲得你需要什麼,你可以使用attributes方法:

new_config.each do |config| 
    Linkconfigdetail.create(config.attributes) 
end 
+0

'new_config'是一個關係,而不是對象 –

+1

@ Slava.K對,剛剛編輯了答案 –

+0

感謝您的回答。我接受了另一個,因爲複製原來的內容是解決我的問題。但'attributes'看起來非常有用,我相信我很快就會需要它。 –

相關問題