我有一个问题循环,其中每个问题都属于一个帖子,帖子标题显示在问题上方。如果连续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'但是我能做那样的事情还是有更好的方法来做这个?
答案 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 %>
一些小调: