2017-02-27 4 views
2

既存のレコードを使用してmysqlデータベースにいくつかのレコードを作成したいとします。私は、これは私のコントローラでrelevatコードであるレール4.2別のオブジェクトからオブジェクトを作成する

を使用しています:

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.): 

と作成方法の行が表示されます。

私はすでにチェックしています。 new_config-arrayはnilではありません。私はすべてのヒント、または一般に、この問題に対する他の解決策をお願い

#<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: ... 

を:(点検使用して)作成する前に、それは、このように見ています。私は想像することができない、これはとても難しい。私はすでにデータセットを変更するためにも多くの問題を抱えていました。 deleteのような多くのメソッドはうまくいきませんでしたが、私はこの問題を回避する方法を見つけることができませんでした。

答えて

4

attributesメソッドを使用します。代わりに、あなたは(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にオブジェクトを渡している(ちょっと、それはそれはありませんが、エラーが言うまさにです;?))

だから、あなたが必要なものを得るために、あなたは可能性がありあなたが関係または他のインスタンスことのないcreateのハッシュを渡すことはできません

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

'new_config'はオブジェクトではなく、関係である –

+1

@ Slava.K右、実際に答えを編集しました –

+0

あなたの答えをありがとう。私はもう一方を受け入れました。オリジナルを複製することは私の問題を少しばかり解決していたからです。しかし、「属性」は非常に有用に見えます。私はすぐにそれが必要になると確信しています。 –

関連する問題