[解決済み] railsで1回の呼び出しで複数のオブジェクトを保存する
2022-02-19 06:59:06
質問
railsで以下のようなメソッドがあります。
a = Foo.new("bar")
a.save
b = Foo.new("baz")
b.save
...
x = Foo.new("123", :parent_id => a.id)
x.save
...
z = Foo.new("zxy", :parent_id => b.id)
z.save
問題は、エンティティを追加すればするほど、この作業に時間がかかることです。これは、すべてのレコードについてデータベースをヒットしなければならないからだと思います。ネストされているので、親を保存する前に子を保存することはできませんが、一度にすべての親を保存し、その後すべての子を保存したいと思います。次のようなことができればいいのですが。
a = Foo.new("bar")
b = Foo.new("baz")
...
saveall(a,b,...)
x = Foo.new("123", :parent_id => a.id)
...
z = Foo.new("zxy", :parent_id => b.id)
saveall(x,...,z)
そうすれば、たった2回のデータベースヒットですべてが完了します。railsでこれを行う簡単な方法はありますか、それとも一度に1つずつ行うことになるのでしょうか?
どのように解決するのですか?
insert_all (Rails 6+)
Rails 6
は、新しいメソッドを導入しました。
インサート_オール
これは、複数のレコードを一度にデータベースに挿入するものです。
SQL INSERT
ステートメントを使用します。
また、このメソッド はいかなるモデルもインスタンス化しません。 と Active Recordのコールバックやバリデーションを呼び出さない .
だから
Foo.insert_all([
{ first_name: 'Jamie' },
{ first_name: 'Jeremy' }
])
よりも大幅に効率的です。
Foo.create([
{ first_name: 'Jamie' },
{ first_name: 'Jeremy' }
])
新しいレコードを挿入したいだけなら
関連
-
[解決済み】Rails。Ruby on Railsの移行でデータベースカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] Oauth2 Instagram API "リダイレクトURIが登録されたリダイレクトURIと一致しない"
-
[解決済み] railsでhidden fieldタグを使用する方法
-
[解決済み] Ruby: public static メソッドを作るには?
-
[解決済み] ActionController::RoutingError: 初期化されていない定数MicropostsController
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] エラーが発生しました。pgsqlをrailsで動作させようとすると、Peer authentication failed for user "postgres" と表示されます。
-
[解決済み] Railsの:includeと:joinsの比較
-
[解決済み】Railsの認証トークンを理解する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】TypeError: SymbolからIntegerへの暗黙の変換がない。
-
[解決済み】bcrypt LoadError: Cannot load such file
-
[解決済み】OS X Yosemite 10.10.5 で [Ruby on Rails] 5 をインストールすると extconf が失敗して終了コード 1 エラーになる。
-
[解決済み] DestroyとDeleteの違い
-
[解決済み] RVMでRubyのデフォルトバージョンを設定するには?
-
[解決済み] Ruby: public static メソッドを作るには?
-
[解決済み] バリデーションなしで属性を更新する方法
-
[解決済み] 構文エラー "構文エラー、予期しない入力終了、keyword_endを期待 (SyntaxError)"
-
[解決済み] Heroku Error R14 (Memory quota exceeded): How do I solve this?
-
[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]