RSVP.where(...)
の有無にかかわらず、オブジェクトincludes(...)
のコレクションを返しRSVP
ます。:invitation
each が持っている関連付けを含めることで、コレクション内のfor eachを一度にRSVP
熱心に読み込みます。これにより、コレクションの関連付けを参照するときに、コレクション内のすべてに対して個別のクエリが実行されるのを防ぐことができます。:invitation
RSVP
SELECT * FROM invitations WHERE ...
RSVP
:invitation
.includes
コレクション内のオブジェクトの関連付けを使用する予定がある場合は、クエリの最適化に他なりません。アソシエーションの属性を結果セットのモデル インスタンスにマージしません。
インスタンスに関連付けられたインクルードからの属性が必要な場合は、 RailsInvitation
メソッドを使用できます。ここでそれについて読むことができます。RSVP
delegate
モデルでは、次のようなことを行い、以下に残したプレースホルダーの代わりにRSVP
必要な属性をリストします。Invitation
class RSVP < ActiveRecord::Base
has_one :invitation
delegate :some_invitation_attribute, :another_invitation_attribute, to: :invitation
これで、インスタンス:some_invitation_attribute
を:another_invitation_attribute
直接呼び出すことができます。RSVP
@results = RSVP.where(user_id: 3).includes(:invitation)
puts @results.first.some_invitation_attribute # delegates the .some_invitation_attribute method call to the associated Invitation