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
来自何处,但我想仅显示每个关注用户的最新状态。
我在哪里放置神奇的字眼?
答案 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)
然后你可以像以前一样做每个迭代并显示每个状态。