2

在我当前的项目中,我需要向 ActiveRecord::Relation 添加一条记录。我不能将它用作数组,因为我需要在“合并”之后应用排序范围(然后是分页)。问题是我找不到以“好”的方式做到这一点的方法。

我需要合并的关系很简单:一个典型的友谊关联。本质上,我需要与用户和用户的所有朋友建立关系。如果我可以使用数组,它会很简单:

user.friends + [user]

但我需要一个关系。现在我正在使用这个范围:

scope :user_and_friends, lambda { |user| includes(:friendships).where(Friendship.arel_table["friend_id"].eq(user.id).or(arel_table["id"].eq(user.id))) }

但这非常慢。你能帮助我吗?

4

2 回答 2

0

最后,我自己找到了解决方案。新的范围是这样的:

scope :user_and_friends, lambda { |user| joins(:friendships).where(Friendship.arel_table["friend_id"].eq(user.id).or(User.arel_table["id"].eq(user.id))).group("user_id") }

joins比 快得多includes,特别是当您有很多记录时。此范围的唯一问题是joins生成的重复记录,但由于group.

于 2012-10-15T18:54:15.690 回答
0

尝试这个

scope :user_and_friends, lambda { |user| user.friends.merge(user) }

一点关于合并方法(关联部分)。

至少你可以这样做:

user.friends.merge(user)
于 2012-10-14T22:30:31.467 回答