Если вам просто нужен листинг в представлении, самый простой способ сделать это - отобразить один, а затем другой.
Таким образом, вы будете отображать все магазины с брендами и сортировать их как обычно.
Затем отобразите все магазины без брендов и выполните сортировку в обычном режиме.
В вашем магазине покажите контроллер:
if Shop.brands.empty?
@shopsWithout = @shops.sort_by{ |shop| shop.name}
else
@shopsWith = @shops.sort_by{ |shop| topic.name}
end
тогда, на ваш взгляд, просто отобразите каждый.
<% unless @shopsWith.blank? %>
<% @shopsWith.each do |shop| %>
Shop: <%= shop.name %> Brand: <%= (you can loop shop.brands.all) %>
<% end %>
<% end %>
<% unless @shopsWithout.blank? %>
<% @shopsWithout.each do |shop| %>
Shop: <%= shop.name %><br />
<% end %>
<% end %>
Я проверил это, и он отлично работает. Не уверен, как объединить @shopsWith и @shopsWithout, но если вы можете сделать это в контроллере (@shops = @shopsWith << @shopsWithout), то вам нужен только один цикл. Я не смог понять это без мысли Руби, что я использую массив вместо коллекции объектов. </p>