:name、:ageなどのフィールドを持つActiveRecordモデルであるオブジェクトPersonsがあります。
人は、すべての人がアカウントを持っているアカウントと呼ばれるものと1:1の関係を持っています。
私はそうするいくつかのコードを持っています:
Account.create!(person: current_person)
ここで、current_personは、指定された既存のPersonアクティブレコードオブジェクトです。
注:テーブルAccountにはperson_idのフィールドがあり、両方のモデルにhas_oneがあります。
今、私たちは一括作成のために以下のようなことをすることができると信じています:
Account.create!([{person: person3},{person:: person2} ....])
私はの配列を持っていpersons
ますが、すべて同じキーを持つハッシュの配列に変換するための最良の方法がわかりません。
基本的に、ハッシュの配列を配列に変換するの逆が私がやりたいことです。
このcreate
メソッドは、ソースコードに示されているように、実際には各ハッシュを個別に永続化するため、おそらくそれはあなたが探しているものではありません。いずれにせよ、次のコードがその仕事をします:
Account.create!(persons.map { |person| Hash[:person_id, person.id] })
同じデータベース操作ですべてのレコードを作成する必要があり、rails 6+を使用している場合は、insert_allメソッドを使用できます。
Account.insert_all(persons.map { |person| Hash[:person_id, person.id] })
以前のバージョンのrailsでは、activerecord-importgemの使用を検討する必要があります。
# Combination(1).to_a converts [1, 2, 3] to [[1], [2], [3]]
Account.import [:person_id], persons.pluck(:id).combination(1).to_a
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加