-2

我正在使用 Rails 3、omniauth 和 facebook graph 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

您不能在 ERB 文件中使用p或。puts将 ERB 文件视为连接在一起的一个大字符串。喜欢"string 1" + "string 2" + "string 3"

这就是 ERB 所做的一切——它只是将字符串粘贴到一个大字符串中。您不能puts在此串联操作中调用。因此,ERB 文件中的所有内容都必须是字符串。调用的输出puts只是“烟消云散”,因为puts调用不返回字符串,而是写入stdout

接下来我们看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 回答