目前我有粉丝可以关注艺术家。现在我想展示艺术家粉丝所关注的艺术家的微博。
我希望在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,它们会显示微博。
答案 0 :(得分:0)
这不是您实现此功能的方式。如果您想在新推文到达时更新时间轴,那么您需要使用Jquery监听更改。观看此[http://railscasts.com/episodes/229-polling-for-changes][1] 它将向您展示如何实现您正在寻找的功能。
提示:不要按created_at排序,这是一个不好的做法,因为create_at不是索引而且会慢一些。而是按ID排序,它会自动递增并编入索引。
artist.artist_microposts.order('id DESC')
答案 1 :(得分:0)
我能够通过首先获取艺术家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"> ]>
答案 2 :(得分:0)
我可以通过在fans
,artists
和artist_microposts
之间创建联接表来实现此目的。然后我做了
<% @fan.artist_microposts.sort_by{ |micropost| micropost.id }.each do |micropost| %>
<%= micropost.content %>
<% end %>
工作得很好。