2015-02-08 33 views
0

目前我有Fans可以關注Artists。現在我想要顯示粉絲正在關注的藝術家的微博。使用循環,軌道創建類似Twitter的時間線

我想在創建藝術家的微博時使用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排序,但因爲它是第一循環通過每個藝術家,它顯示的是屬於一個藝術家的所有微柱,然後顯示屬於下一個藝術家,等等所有mircoposts。

我想這是更多的時間表,如Twitter,顯示微觀柱在他們進來。

回答

0

我能夠fansartistsartist_microposts之間創建連接表來實現這一點。然後我做了

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

工作得很好。

0

這不是你如何實現此功能。如果你想在新的推文到達時更新時間表,那麼你需要使用Jquery來聽取更改。看這個[http://railscasts.com/episodes/229-polling-for-changes][1] 它會告訴你如何實現你正在尋找的功能。

提示:不要按created_at排序,這是一種不好的做法,因爲create_at不是索引,速度會變慢。相反,按id排序,它會自動遞增並建立索引。

artist.artist_microposts.order('id DESC') 
0

我能先取出藝術家IDS,然後選擇是與這些藝術家相關的帖子解決。

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"> ]>