查找所有关注用户创建的最新“推文”

时间:2013-11-04 21:42:57

标签: ruby-on-rails ruby-on-rails-3 twitter

Rails 3.2,Twitter app

更新:想说我想把我的推文随机化。并且发现@instace.shuffle.each非常好。

现在我可以显示所有状态,

users_controller.rb

def buddies
buddies_ids = current_user.followeds.map(&:id).push(current_user.id)

@ribbits = Ribbit.find_all_by_user_id buddies_ids

/views/users/buddies.html.erb

 <% @ribbits.each do |ribbit| %>

<h3><%= ribbit.user.username %></h3>
   <%= ribbit %>

你明白了。虽然我不确定find_all_by_user_id来自何处,但我想仅显示每个关注用户的最新状态。

我在哪里放置神奇的字眼?

2 个答案:

答案 0 :(得分:0)

Ribbit.find_all_by_user_id是由Rails动态创建的方法。在dynamic find_by methods上的RailsCast中查看更多内容。

很像find_all_by_user_id是动态rails方法,find_by_user_id也是如此,它只会找到第一个。{1}}。要找到最新的“ribbit”,你需要写

@latest_ribbit = Ribbit.find_by_user_id(user_id, :order => 'created_at DESC')

编辑:我应该稍微扩展一下。 find_all_by_user_id将接受一系列user_id值(例如buddies ids),其他动态find_all_by...方法也是如此。 find_by_user_id也将接受一组user_ids,但它只返回第一个合格项,而不是数组中每个user_id的第一个合格项。因此,如果您想要一个即插即用示例,请将您的@ribbits =行替换为

@ribbits = []
buddies_ids.each do |id|
  @ribbits << Ribbit.find_by_user_id(user_id, :order => 'created_at DESC')
end

如果你想要一个按时间顺序排序的Feed,那么你需要根据@ribbits上的created_at进行一些排序,因为它将在我的代码末尾以buddies_ids的顺序排列。

答案 1 :(得分:0)

你也应该能够在一行中完成:

@ribbits = Ribbit.where('user_id IN (?)', buddies_ids).order('created_at DESC').group(:user_id)

然后你可以像以前一样做每个迭代并显示每个状态。