【问题标题】:Creating a Twitter-like timeline using loops, rails使用循环、轨道创建类似 Twitter 的时间线
【发布时间】:2015-04-08 15:13:19
【问题描述】:

目前我有可以关注艺术家的粉丝。现在我想展示粉丝关注的艺人的艺人微博。

我想在创建艺术家的微博时按created_at 对其进行排序。

<% @fan.artists.each do |artist| %>
  <% artist.artist_microposts.sort_by{ |micropost| micropost.created_at }.each do |micropost| %>
   <%= micropost.content %>
  <% end %>
<% end %>

它按created_at 排序,但由于它首先循环遍历每个艺术家,所以它会显示属于一个艺术家的所有微博,然后显示属于下一个艺术家的所有微博,依此类推。

我希望它更像是一个时间轴,就像 Twitter 一样,在微博出现时显示它们。

【问题讨论】:

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


    【解决方案1】:

    这不是您实现此功能的方式。如果您想在新推文到达时更新时间线,那么您需要使用 Jquery 收听更改。看这个 [http://railscasts.com/episodes/229-polling-for-changes][1] 它将向您展示如何实现您正在寻找的功能。

    提示:不要按 created_at 排序,这是一种不好的做法,因为 create_at 不是索引并且会更慢。而是按 id 排序,它是自动递增和索引的。

    artist.artist_microposts.order('id DESC')
    

    【讨论】:

      【解决方案2】:

      我能够通过首先获取 艺术家 ID 然后选择与这些艺术家相关联的帖子来解决问题。

      irb(main):019:0> fan = Fan.first
      #<Fan id: 1, name: "Tony">
      
      irb(main):020:0> ids = fan.artists.pluck(:id)
      #=> [1, 2]
      
      irb(main):022:0> posts = Post.where(:artist_id => ids).order("created_at DESC")
      #=> #<ActiveRecord::Relation [
       #<Post id: 3, text: "Third Post", artist_id: 1, created_at: "2015-02-10 12:54:32">, 
       #<Post id: 2, text: "Second Post", artist_id: 2, created_at: "2015-02-09 12:53:14">, 
       #<Post id: 1, text: "First Post", artist_id: 1, created_at: "2015-02-08 12:52:51">  ]>
      

      【讨论】:

        【解决方案3】:

        我能够通过在fansartistsartist_microposts 之间创建一个连接表来完成此操作。然后我做了

        <% @fan.artist_microposts.sort_by{ |micropost| micropost.id }.each do |micropost| %>
           <%= micropost.content %>
        <% end %>
        

        完美运行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-11
          • 1970-01-01
          • 1970-01-01
          • 2017-03-29
          • 1970-01-01
          相关资源
          最近更新 更多