RSVP.where(...)の有無にかかわらず、オブジェクトincludes(...)のコレクションを返しRSVPます。:invitationeach が持っている関連付けを含めることで、コレクション内のfor eachを一度にRSVP熱心に読み込みます。これにより、コレクションの関連付けを参照するときに、コレクション内のすべてに対して個別のクエリが実行されるのを防ぐことができます。:invitationRSVPSELECT * FROM invitations WHERE ...RSVP:invitation
.includesコレクション内のオブジェクトの関連付けを使用する予定がある場合は、クエリの最適化に他なりません。アソシエーションの属性を結果セットのモデル インスタンスにマージしません。
インスタンスに関連付けられたインクルードからの属性が必要な場合は、 RailsInvitationメソッドを使用できます。ここでそれについて読むことができます。RSVPdelegate
モデルでは、次のようなことを行い、以下に残したプレースホルダーの代わりに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