想象一下,像谁拥有很多朋友,每个谁有很多评论,在这里我想向用户显示他的朋友们的最新100个注释的模式用户。
是否有可能绘制出一个SQL查询最新的100,还是我将不得不使用Ruby应用程序逻辑来分析一个更大的列表或进行多次查询?
我看到的要对此有两种方法:
- 开始User.find和使用一些复杂的组合:加入和:限制。 这种方法似乎是有前途的,但不幸的是,会回到我的用户,而不是评论,一旦我得到这些回来,我有很多的模型占用内存(每个朋友和用户),转移大量不必要的字段的(一切对于用户来说,和这个名字排为好友的一切),我仍然不得不步莫名其妙地收集,整理所有应用程序逻辑的意见。
- 起始于评论和使用某种的find_by_sql的,但我似乎无法找出我需要把我不知道你怎么可能有必要的信息传递与此限制它仅看通过朋友提出的意见。
编辑 :我有一些困难越来越EMFI的解决方案的工作,并希望任何有识之士任何人都可以提供。
朋友是通过一个连接表的循环关联。
has_many :friendships
has_many :friends,
:through => :friendships,
:conditions => "status = #{Friendship::FULL}"
这是我收到的相关部分的错误:
错误:列users.user_id不存在
: SELECT "comments".* FROM "comments" INNER JOIN "users" ON "comments".user_id = "users".id WHERE (("users".user_id = 1) AND ((status = 2)))
当我刚进入user.friends,和它的作品,这是它执行查询:
: SELECT "users".* FROM "users" INNER JOIN "friendships" ON "users".id = "friendships".friend_id WHERE (("friendships".user_id = 1) AND ((status = 2)))
因此,它好像它重整的:通过有两个:通过在一个查询。