Ruby on rails . 无论哪种方式,您都可以添加一个方法来将两个关联添加到一起(因为它们是数组)。相反,如果您不关心必须使用ActiveRecord以正常方式删除关联,则可以在单个数据库中使用自定义SQL。但是,根据您的评论,我认为您希望避免这种复杂性,我同意您的看法,除非

Ruby on rails . 无论哪种方式,您都可以添加一个方法来将两个关联添加到一起(因为它们是数组)。相反,如果您不关心必须使用ActiveRecord以正常方式删除关联,则可以在单个数据库中使用自定义SQL。但是,根据您的评论,我认为您希望避免这种复杂性,我同意您的看法,除非,ruby-on-rails,database,facebook,facebook-graph-api,Ruby On Rails,Database,Facebook,Facebook Graph Api,. 无论哪种方式,您都可以添加一个方法来将两个关联添加到一起(因为它们是数组)。相反,如果您不关心必须使用ActiveRecord以正常方式删除关联,则可以在单个数据库中使用自定义SQL。但是,根据您的评论,我认为您希望避免这种复杂性,我同意您的看法,除非您确实必须限制关系行的数量。然而,消耗数据的不是tie表的行数,而是您保存在FacebookFriends表中的所有用户信息。谢谢您的回答。你是对的,从来没有那么多的用户,我只是想学习做事情的最佳方式。如果我使用您建议的模式,每次用户登录时,我


. 无论哪种方式,您都可以添加一个方法来将两个关联添加到一起(因为它们是数组)。相反,如果您不关心必须使用ActiveRecord以正常方式删除关联,则可以在单个数据库中使用自定义SQL。但是,根据您的评论,我认为您希望避免这种复杂性,我同意您的看法,除非您确实必须限制关系行的数量。然而,消耗数据的不是tie表的行数,而是您保存在FacebookFriends表中的所有用户信息。

谢谢您的回答。你是对的,从来没有那么多的用户,我只是想学习做事情的最佳方式。如果我使用您建议的模式,每次用户登录时,我都需要更新relationships表,以便为自上次访问我的站点以来已注册的用户朋友创建友谊。这将需要在他们的朋友列表中循环并尝试在我的数据库中找到一个用户,如果存在,则创建一个新的关系条目(如果还没有)。这是最有效的做事方式吗?这似乎效率很低。您的目标似乎是拥有更少的记录(根据问题中10000000行的示例),因此每个关系只有一行,而同一关系的每个方向只有一条记录将是行数的一半(因此将是5000000)。但是,如果您不介意每个关系都有可能重复的行,那么对于您当前的需求来说,这似乎是一个更好的解决方案。此外,您没有(或者至少不应该)在控制器中进行循环以获得每个朋友。您的查询是正确的,数据库(希望)在这方面做得很好。要避免像您所提到的那样的n+1查询,请使用
:include
选项确保在AR查询时,它仅为单个查询的每个模型类型查询一次。您可以对此进行更多优化,但在一开始,您可能不需要这样做。一旦数据库中有条目将两个用户关联为好友,我意识到我可以使用User.friends.all或类似的内容。不过,最初,当我从Facebook获取好友列表作为姓名和用户名的散列时,我需要循环这个散列,并尝试在我的用户表中为每个人找到一个链接到该Facebook用户名的用户,不是吗?除非我从facebook用户id在该散列列表中的用户中进行选择(但鉴于该列表可能有1000长,这似乎不是一个好方法?)。啊,关于
:include
注释,我假设您的意思类似于user.friends.all(:include=>:users),以确保它返回与该好友条目关联的用户?