-2

Rails 3、omniauth、facebook グラフ API を使用して、教育アプリケーションのプロトタイプを作成しています。したがって、ユーザーが自分の Facebook アカウントを使用してアプリケーションにログインすると、すべての教育履歴と友人の education_history が取得されます。

私はすべてのユーザーの友達の教育をグループ化したいと思います: ここに画像の説明を入力

私はこのようなことを試しました:

<ul class="friends-list">
<%= current_user.friends.group_by(&:highschool_name) do |highschool_name| 
 p "<li>#{highschool_name}</li>"
 end
 %>
</ul>

そして、構文エラーが発生します。

ユーザー テーブルは次のようになります。

[id, name, image, location, highschool_name, highschool_year, college_name, college_year, graduteschool_name, graduate_year ]

Friend テーブルは次のようになります。

[id, uid, name, image, higschool_name, college_name, graduateschool_name, user_id]

それらは有効ではないため、ループなしでアクティブレコードを使用して問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

pまたはputsERBファイルでは使用できません。ERBファイルは、連結された1つの大きな文字列と考えてください。のように"string 1" + "string 2" + "string 3"

ERBが行うのはこれだけです。文字列を1つの大きな文字列に貼り付けるだけです。putsこの連結操作内で呼び出すことはできません。したがって、ERBファイル内のすべてが文字列である必要があります。呼び出しは文字列を返さないため、呼び出しからの出力はputs「煙の中で上昇します」。代わりに書き込みます。putsstdout

次に見てみましょgroup_byう:それは:を返しHashます

---------------------------------------------------- Enumerable#group_by
     enum.group_by {| obj | block }  => a_hash
------------------------------------------------------------------------
     Returns a hash, which keys are evaluated result from the block,
     and values are arrays of elements in enum corresponding to the key.

        (1..6).group_by {|i| i%3}   #=> {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]}

したがって、すべてをまとめると、次のようなことができます。

<% current_user.friends.group_by(&:highschool_name).each do |hsname, friends| %>
   <% next if hsname.blank? %>
   <li><%= hsname %></li> 
   <% friends.each do |friend| %>
     <%= image_tag(friend.img_url) %> # <- Or wherever you get the img url from 
   <% end %>
<% end %>
于 2012-07-14T23:36:31.113 に答える