2017-06-13 9 views
2

通知フィードのアクティビティをレンダリングしようとしていますが、@activitiesを正しくループする方法がわかりません。背景については@activitiesのデータ構造を持つ通知フィードの問題(ループを回避する方法がわからない)

、私はお勧めSitepointチュートリアルに従っ:https://www.sitepoint.com/super-easy-activity-feeds-with-stream/

私のコードは基本的に同じです。ここで@activitiesオブジェクトだ:

<div class="page-header"><h1>Your notification feed</h1></div> 

<% for activity in @activities %> 

    <%= render_activity activity %> 
<% end %> 

そして、私の部分(ビュー/ aggregated_activity/_follow.html.erb):

[2] pry(#<FeedsController>)> @activities 
=> [{"activities"=> 
    [{"actor"=> 
     #<User id: 1, email: "[email protected]", created_at: "2017-06-08-21:33:00", updated_at: "2017-06-13 18:15:59", name: "Andy">, 
    "foreign_id"=>"Follow:4", 
    "id"=>"861b2600-5063-11e7-8080-8000262131d5", 
    "object"=> 
     #<User id: 1, email: "[email protected]", created_at: "2017-06-08 21:33:00", updated_at: "2017-06-13 18:15:59", name: "Andy">, 
    "origin"=>nil, 
    "target"=>nil, 
    "time"=>"2017-06-13T18:10:04.000000", 
    "to"=>["notification:1"], 
    "verb"=>"Follow"}], 
    "activity_count"=>1, 
    "actor_count"=>1, 
    "created_at"=>"2017-06-13T18:10:04.000000", 
    "group"=>"48946_2017-06-13", 
    "id"=>"861b2600-5063-11e7-8080-8000262131d5", 
    "is_read"=>false, 
    "is_seen"=>false, 
    "updated_at"=>"2017-06-13T18:10:04.000000", 
    "verb"=>"Follow"}, 
{"activities"=> 
    [{"actor"=> 
     #<User id: 1, email: "[email protected]", created_at: "2017-06-08 21:33:00", updated_at: "2017-06-13 18:15:59", name: "Andy">, 
    "foreign_id"=>"Follow:1", 
    "id"=>"8b249a80-4fbb-11e7-8080-80002a2ebc3f", 
    "object"=> 
     #<User id: 1, email: "[email protected]", created_at: "2017-06-08 21:33:00", updated_at: "2017-06-13 18:15:59", name: "Andy">, 
    "origin"=>nil, 
    "target"=>nil, 
    "time"=>"2017-06-12T22:07:37.000000", 
    "to"=>["notification:1"], 
    "verb"=>"Follow"}, 
    {"actor"=> 
     #<User id: 2, email: "[email protected]", created_at: "2017-06-08 21:35:33", updated_at: "2017-06-08 22:01:50", name: "Niko">, 
    "foreign_id"=>"Follow:2", 
    "id"=>"40edea00-4fb8-11e7-8080-8000106d4b0d", 
    "object"=> 
     #<User id: 1, email: "[email protected]", created_at: "2017-06-08 21:33:00", updated_at: "2017-06-13 18:15:59", name: "Andy">, 
    "origin"=>nil, 
    "target"=>nil, 
    "time"=>"2017-06-12T21:44:04.000000", 
    "to"=>["notification:1"], 
    "verb"=>"Follow"}], 
    "activity_count"=>2, 
    "actor_count"=>2, 
    "created_at"=>"2017-06-12T21:44:04.000000", 
    "group"=>"48946_2017-06-12", 
    "id"=>"8b249a80-4fbb-11e7-8080-80002a2ebc3f", 
    "is_read"=>false, 
    "is_seen"=>false, 
    "updated_at"=>"2017-06-12T22:07:37.000000", 
    "verb"=>"Follow"}] 

ここでメインビューには、(ビューは//notification.html.erbフィード)です。私は上記の部分を変更した場合

<div class="well well-sm"> 
    <p><small class="text-muted"><%= time_ago_in_words activity['time'] -%> ago</small></p> 

    <p><strong><%= activity['object'].name %></strong> and <strong><%= activity['actor'].name %></strong> are now friends</p> 
</div> 

は、私は次のように、右のオブジェクトにアクセスすることができます。

<div class="well well-sm"> 
    <p><small class="text-muted"><%= time_ago_in_words activity['activities'][0]['time'] %> ago</small></p> 

    <p><strong><%= activity['activities'][0]['object'].name %></strong> and <strong><%= activity['activities'][0]['actor'].name %></strong> are now friends</p> 
</div> 

しかし、それは正しい方法のようには見えません。表示される唯一のアクティビティは、私が自分自身をフォローしている場合で、2番目のユーザー(John)に従うときではないようです。値が配列であるこの配列のハッシュにループする最良の方法は何ですか?

答えて

1

sitepoint.comのチュートリアルが現在どのように流れているかを私たち(ストリーム)が書き留めていないので、もう一度調べる必要があります。戻るけれども、あなたの質問に

:私たちの通知フィード、あなたが見ることができるように、別々にグループ化されてしまうと通知フィードのためにあなたは、二重ループを必要とするだろう:

<% for group in activities %> 
    <% for activity in group %> 
    <%= render_activity activity %> 

をサイドノートとして、私たちのstream_railsライブラリには、アクティビティ内の参照を完全なオブジェクトに戻すために使用できるツールがいくつかあります(enrichment)。デフォルトではアクターとオブジェクトを扱います。これは上記のアクティビティー・データをダンプするときに表示されるのようなものへのアクセスを提供しますが、後でそれらを組み込む場合はメタデータ項目の他のモデルを参照することもできます。

+1

ありがとうございました。それに遅れて戻ってきたことに対する謝罪。 チュートリアルはかなり古いです。それは2015年10月1日に出版されました。私は物事がその後変わったと確信しています。 問題自体については、私は戻り値を誤解していたと思います... Andyに従うために3人目のユーザー(Bob)を作成した後、通知フィードはAndyに続くBobを知らせます。 「Andyは現在Andyに従っています。私は、これは表示する通知を把握することにすぎないと思います。再度、感謝します! hahaを使ってストリームをより多く使うと、あなたは私から多くの質問を見ているかもしれません – PandyZhao

+1

また、私はreadmeにあるループのオリジナルを使用してしまいました:<%for activity in @activities%> etc'再び、データで何が起きているのか誤解しています – PandyZhao

関連する問題