私は、Railsに似たActiveRecordをORMとして使用するRuby 2.2.2アプリケーションを持っています。私は2つのテーブルを持っています。「ユーザー」と「アカウント」は「アカウント」がbelongs_to :user
です。与えられたユーザのために、私は単に(user_accounts
という名前の)Rubyのオブジェクトに熱心な負荷への「アカウント」テーブルの内容をしたいので、私のような操作を実行できます。実行find_by_product_name
方法なし...ActiveRecordを使用してデータベーステーブルをロードしようとしています
user_accounts.find_by_product_name("nameofproduct")
SQLクエリ。実行したSQLクエリの数を最小限に抑えるために、(特定のユーザに属する)「accounts」テーブルのすべてのエントリをRubyオブジェクトにプリロードするだけです。
私が読んだドキュメントの数にかかわらず、これを正しく行う方法を理解できません。これは可能ですか?もしそうなら、どうですか?
これはうまくいくようです。ありがとうございます。もう1つの最後の質問:この配列に手動でレコードを追加したいのであれば、それは可能でしょうか?つまり、私はuser.accountsをロードしたいと思うし、A)レコードを実際のDBに追加し、B)そのレコードをuser.accounts eager-loaded配列にテーブル全体をリロードせずに追加する? – JimboTwice
はい、私はそれが何か問題であるとは思わない。 '@ user.accounts.build'または' @ user.accounts.create'のいずれかを使って新しいレコードをDBに追加すると、追加されたレコードはキャッシュされたレコードにすべてリロードされることなく追加されます。 – DanneManne
素晴らしいです、ありがとうございます。私たちはこれに関して最後に1つの質問を持っています。個々のユーザーのUserテーブルとeager_loadアカウントから個々のレコードを読み込むことは可能ですか?これを行う方法を決定することはできません:もしUser.find_by_email( "[email protected]")なら、.eager_loadを活用することはできません。 Userテーブルから個々のエントリを読み込み、そのエントリのアカウントテーブルをeager_loadすることは可能ですか? – JimboTwice