如果第一次出现Rails元素

时间:2013-03-19 06:48:29

标签: ruby-on-rails ruby

我有一个模型帖子: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

1 个答案:

答案 0 :(得分: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 %>