0

我有一个包含用户列表的 rails 应用程序。我在用户之间有不同的关系,例如合作、朋友、首选。列出用户时,我必须决定当前用户是否可以将特定用户添加到他的朋友中。

     -if current_user.can_request_friendship_with(user)
      =add_to_friends(user)
    -else
      =remove_from_friends(user)

   -if current_user.can_request_worked_with(user)
      =add_to_worked_with(user)
    -else
      =remove_from_worked_with(user)

can_request_friendship_with(user) 看起来像:

  def can_request_friendship_with(user)
   !self.eql?(user) && !self.friendships.find_by_friend_id(user)
  end

我的问题是,在我的情况下,这意味着每个用户有 4 个查询。清单 10 个用户意味着 40 个查询。我能以某种方式急切地加载这个吗?

4

1 回答 1

0

让我们得到random_userscurrent_user
因此non_firends = random_users - current_user.freindships将在两个查询中返回来自用户查询的所有非朋友。

实际上,您可以预加载所有朋友并使用include?友谊数组的方法:

@friendships = current_user.friendships

def can_request_friendship_with(user)
  !self.eql?(user) && @friendships.include? user
end
于 2010-05-10T12:16:06.070 回答