我在视图中有一个代码:
<% @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| %>
,但它不起作用。
有办法吗?感谢。
答案 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