2010-05-10 60 views
0

我有导轨应用程序,其中有一个用户列表。我有不同的用户之间的关系,例如,与朋友合作,首选。在列出用户时,我必须决定当前用户是否可以将特定用户添加到他的朋友。急切加载此导轨协会

 -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(用户)看起来像:

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

我的问题是,这意味着我的每用户案例4查询。清单10的用户意味着40个查询。我可以不知何故加载这个?

回答

0

让我们有random_userscurrent_user
所以non_firends = random_users - current_user.freindships将在两个查询返回的用户查询中的所有non_friends。

其实你可以下载所有的朋友和使用include?方法友谊阵列:

@friendships = current_user.friendships 

def can_request_friendship_with(user) 
    !self.eql?(user) && @friendships.include? user 
end 
+0

您的解决方案是不是最好的,但它背后的想法是好的。在can_request_friendship_with函数中,我们无法访问该实例变量,但这不是问题。 – dombesz 2010-05-10 17:19:54

+0

这不是一个完整的解决方案。我在说的是从数据库级别排除你的问题 – fl00r 2010-05-10 17:34:36