查找所有关注用户创建的最新"tweet"



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来自哪里,但我只想显示每个关注用户的最新状态。

我把魔术词放在哪里?

您还应该能够在一行中完成此操作:

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

然后,您可以像以前一样执行每个循环访问并显示每个状态。

Ribbit.find_all_by_user_id是由

Rails动态创建的方法。在此 RailsCast 中查看有关动态find_by方法的更多信息。

就像find_all_by_user_id是一种动态轨道方法一样,find_by_user_id也是如此,它只会找到第一个。要找到最新的"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

然后,如果您想要按时间顺序排列的提要,则需要根据created_at@ribbits进行一些排序,因为它将按代码末尾的buddies_ids顺序排列。

最新更新