我有这样的模特:
class User
has_many :invites
has_many :follows
has_many :received_follows, class_name: 'Follow', inverse_of: :recipient
class Invite
belongs_to :user
class Follow
belongs_to :user
belongs_to :recipient, class_name: 'User'
可以邀请用户参加许多活动。此外,用户可以通过单向连接关注其他用户。
我正在访问控制器方法invites#index
以获取给定用户的邀请列表。 Invite对象本身并不是特别有用,因此在响应中我想要包括关联的User对象和嵌套的Follow对象(如果适用),如果发出请求的用户跟随该用户 - 这将节省一吨后续API调用。像这样:
invite: {
id: 1,
user: {
id: 1,
name: 'Foo Bar',
follow: {
id: 1
}
}
}
为此,我在下表中做了left join
,如下所示:
invites = @user.invites.
joins(:user).
joins("LEFT JOIN follows ON recipient_id=users.id AND user_id=#{current_user.id}")
这让我获得了我想要的数据,但我不确定如何使用activerecord魔法来为响应者打包它。我试过这个,但由于显而易见的原因,它不会工作:
respond_with invites.to_json(include: [user: [:follow]])
有任何帮助吗?我完全错了吗?