在循环中,查找两个记录是否属于同一个帖子

时间:2014-09-30 03:22:48

标签: ruby-on-rails

我有一个问题循环,其中每个问题都属于一个帖子,帖子标题显示在问题上方。如果连续2个(或3个或4个等)的问题属于同一个帖子,我只想显示一次帖子名称。我的想法是使用一个索引检查先前的问题是否发布==当前的问题发布。问题是我不确定这是怎么回事。

以下是我的尝试:

<% @questions.each_with_index do |question, i| %>

<% unless (i-1).comment.post == question.comment.post %>
 <%= question.comment.post.title %>
<% end %>

<% end %>

这给了我一个未定义的方法注释错误,因为我不能调用'(i-1).comment'但是我能做那样的事情还是有更好的方法来做这个?

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是使用group_by按帖子对问题进行分组:

<% @questions.group_by {|q| q.comment.post}.each do |post, questions| %>
  <%= post.title %>

  <% for question in questions %>
    <%= question.title %>
  <% end %>
<% end %>

答案 1 :(得分:1)

如果您需要维护问题的顺序,可以使用each_cons

<%= @questions.first.comment.post.title %>

<% @questions.each_cons(2) do |previous_question, question| %>
  <% unless previous_question.comment.post == question.comment.post %>
   <%= question.comment.post.title %>
  <% end %>
<% end %>

一些小调:

  1. 这是一个令人不安的德米特法违规行为(不得不从问题到评论到帖子以及最终的标题)。
  2. 这种复杂的数据操作在Ruby对象中要比在模板中好得多。理想情况下,模板很简单。