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") }

joinsincludes特にレコードがたくさんある場合は、よりもはるかに高速です。このスコープの唯一の問題は、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 に答える