【问题标题】:Find most recent "tweet" created by all followed users查找所有关注用户创建的最新“推文”
【发布时间】:2013-11-15 15:54:06
【问题描述】:

Rails 3.2,推特应用

更新:想说我正在寻找随机化我的推文。并发现@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 的来源,但我只想显示每个关注用户的最新状态。

我把魔法词放在哪里?

【问题讨论】:

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


    【解决方案1】:

    你也应该能够在一行中做到这一点:

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

    然后您可以像以前一样执行 each 来迭代并显示每个状态。

    【讨论】:

    • 你先生赢得了我的午餐。我会研究这条线,这样我才能理解它的伟大。
    • 女士...我很高兴它起作用了 :) 如果您想解释一下,请告诉我。
    • 所以我可能想要一个解释......看来 heroku/postgres 给我的错误尤其是这一行。
    • 从我幼稚的眼睛可以看到...是的。
    • 具体ActionView::Template::Error (PG::GroupingError: ERROR: column "ribbits.id" 然后它指向我认为@ribbits.each 等的区域
    【解决方案2】:

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

    很像find_all_by_user_id 是一种动态rails 方法,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 的顺序排列。

    【讨论】:

    • 在我看来,这样做,我相信我失去了做ribbit.user.username 的能力。疑难解答。
    猜你喜欢
    • 2018-04-23
    • 1970-01-01
    • 2015-05-13
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    相关资源
    最近更新 更多