我正在使用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 ]
而朋友的表格看起来像这样:
[id, uid, name, image, higschool_name, college_name, graduateschool_name, user_id]
如何解决我的问题使用活动记录,没有循环,因为它们没有效果..对吗?
答案 0 :(得分:1)
您无法在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 %>