1

我有一个带有 :mark, :text 的模型帖子

我的帖子有一个列表

<% @posts.each do |p| %>
  # todo
  <% if p.mark? %>
    <%= p.mark %> <%= sweet_thing(p.text) %>
  <% else %>
    <%= sweet_thing(p.text) %>
  <% end %>
<% end %>

我需要显示 p.mark 名称而不是 #todo 哪里 p.mark 第一次出现。最终的txt示例:

奥迪

奥迪,文字-文字-文字-文字。

奥迪,文字-文字-文字-文字。

奥迪,文字-文字-文字-文字。

福特

福特,文字-文字-文字-文字。

福特,文字-文字-文字-文字。

福特,文字-文字-文字-文字。

福特,文字-文字-文字-文字。

更新

我的 txt 在控制器中渲染

 def txt_receiver
    @posts = Post.where("created_at >= ?", 7.days.ago.utc).find(:all, order: "mark, LOWER(post)")
    render "txt_for_newspapper", formats: ["text"]
  end
4

1 回答 1

2

一个明显的解决方案是跟踪看到的标记。

<% seen_marks = {} %>
<% @posts.each do |p| %>
  <% unless seen_marks[p.mark] %>
    <%= p.mark %>
    <% seen_marks[p.mark] = true %>
  <% end %>

  # rest of your code

<% end %>

更好的解决方案(我认为)包括按标记对帖子进行分组,然后分组输出。但我不确定它是否符合你关于缺失标记的逻辑。

<% @posts.group_by(&:mark).each do |mark, posts| %>
  <%= mark %>

  <% posts.each do |p| %>
    <%= p.mark if mark %> <%= sweet_thing(p.text) %>
  <% end %>
<% end %>
于 2013-03-19T06:54:22.413 回答