在Rails中分组

时间:2016-07-12 08:09:40

标签: ruby-on-rails grouping

我在视图中有一个代码:

<% @insurer.offices.includes(:city).order('cities.name asc').each do |office| %>
    <div class="headline">
      <h4><%= office.city.name %></h4>
    </div>
    <p><%= office.name %></p>
  <% end %>

在这个循环之后,我可以看到这些城市中的城市和办公室,但城市重复如下:

New York:
Office address

New York:
Other office address

我需要显示按城市分组的所有办公室。我试过了 <% @insurer.offices.includes(:city).group('cities.name').order('cities.name asc').each do |office| %>,但它不起作用。 有办法吗?感谢。

2 个答案:

答案 0 :(得分:0)

您的循环旨在一次为您提供一个办公室。即使城市被分组,当你有3个纽约办事处时,它也会循环3次。

要在常见的城市标题下对办公室进行分组,您需要按城市分组办公室,并且您的循环需要记住上一个城市,并且仅在城市更改时显示标题。

添加一个像previous_city这样的变量(它可能需要在循环之前用nil进行初始化),并且仅在previous_city == office.city时显示标题,并在循环结束时显示标题{{1 }}

另一件事,previous_city = office.city应该在控制器中定义的变量中。

答案 1 :(得分:0)

这是否有所帮助:

<% @all_insurers.each do |city, office| %>
  <div class="headline">
    <h4><%= city.name %></h4>
  </div>
  <% office.each do |city_office| %>
    <%= city_office.name%>
  <% end %>
<% end %>

在我的insurers_controller中:

def show
  @insurer = Insurer.find(params[:id])
  @all_insurers = @insurer.offices.includes(:city).order('cities.name asc').group_by(&:city)
end