【问题标题】:group_by education - rails 3group_by 教育-rails 3
【发布时间】:2012-07-14 22:56:42
【问题描述】:

我正在使用 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]

如何使用活动记录解决我的问题,没有循环,因为它们没有效率......对吗?

【问题讨论】:

  • 语法错误说明了什么?
  • @DVG,错误提示:块 arg 和实际块均已给出

标签: ruby-on-rails ruby ruby-on-rails-3 facebook-graph-api activerecord


【解决方案1】:

您不能在 ERB 文件中使用 pputs。将 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 %>

【讨论】:

  • 感谢您的精彩解释,我现在收到此错误:未定义方法`highscool_name'
  • @SHUMAcupcake - 糟糕,我的代码中有错字。重新加载以进行最新编辑。
  • 好的。它首先输出所有用户朋友,然后为每个用户输出每个 highschool_name 两次..
  • @SHUMAcupcake Casper 的代码看起来是正确的。请将您上面的代码更新为您当前使用的代码,我们可以帮助您找到您的拼写错误
  • @Casper,对不起,伙计们。我现在注意到该应用程序可以双重保存朋友。你的代码是对的
猜你喜欢
  • 2010-10-28
  • 2019-04-29
  • 1970-01-01
  • 2017-01-03
  • 2015-03-21
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多