Rails4:如何在每个循环中忽略相同的值

时间:2015-09-21 21:49:47

标签: ruby-on-rails ruby ruby-on-rails-4

我想做的是在每个循环中首次显示相同的值。

例如,"第1天和第34天;即使有很多a.day = 1,也会显示在第一个循环中。

我尝试了一些代码,但我无法做到。请告诉我如何显示价值。

查看代码;

  <% @article.each do |a| %>
    <h3>Day<%= a.day %></h3>
    <strong><%= a.title %></strong><br>
  <% end %>

架构;

  create_table "articles", force: true do |t|
    t.integer  "category_id"
    t.integer  "day"
    t.string   "title"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

2 个答案:

答案 0 :(得分:0)

如果我理解正确,我认为您试图在同一天将标题分组到一个标题下。您可以使用group_by完成此操作,如下所示:

# `group_by` returns a hash with days as keys and arrays of matching articles as values
<% @article.order(:day).group_by(&:day).each do |day, articles| %>
  <h3>Day <%= day %></h3>

  # we then iterate over the articles matching this day
  <% articles.each do |article| %>
    <strong><%= article.title %></strong><br/>
  <% end %>
<% end %>

您可以在Enumerable docs中详细了解group_by

答案 1 :(得分:0)

您应该做的是直接在ActiveRecord的模型上获取唯一值。

但是,您可以使用uniq方法:

<% @articles.each.uniq { |article| article.day } do |a| %>
  <h3>Day<%= a.day %></h3>
  <strong><%= a.title %></strong><br>
<% end %>

希望这有帮助:)