2016-03-29 7 views
0

Wie kann ich einzigartiges Land, gefolgt von verwandten Städten auflisten? Im Anschluss waren meine Produkttabelle:Schienen erhalten einzigartiges Land mit Städten

name country city 
p1  US  New York 
p2  US  Boston 
p3  US  Chicago 
k1  UK  London 
k2  UK  Liverpool 

Controller:

@countries = Product.joins(:user).distinct.where("country is not null and country <> ''").where(:users => {:merchant_status => 1}).pluck(:country) 

@cities = Product.joins(:user).distinct.where("city is not null and city <> ''").where(:users => {:merchant_status => 1}).pluck(:city) 

@countries.map! {|country| country.split.map(&:capitalize).join(' ')} 

@search_location_country = @countries 

und meiner Ansicht nach:

<ul id="color-dropdown-menu" class="dropdown-menu dropdown-menu-right" role="menu"> 

    <% @search_location_country.each do |country| %> 
    <li class="input"><a href="#"><%= country %></a></li> 
    <% end %> 
</ul> 

Wie kann ich das Endergebnis sortieren nach wie dieses Dropdown:

US 
- New York 
- Boston 
- Chicago 
UK 
- London 
- Liverpool 

Danke !! Sie

enter image description here

+0

Was ist '@ cities' für? – sschmeck

+0

@sschmeck Städte, die ich für die Suche ohne Dropdown verwendet habe. Die Suche nach Land und Stadt funktioniert einwandfrei, aber ich muss die Art und Weise, wie sie angezeigt wird, sortieren. Land gefolgt von Listen der Städte – d3bug3r

+0

Sie suchen nach select2 Element oder ähnliches Ich tinke – Guru

Antwort

1

Hey Sie können versuchen, auf diese Weise mit group es gibt Ihnen alle unterschiedlichen Datensätze

@countries_cities = Product.joins(:user).where("country is not null and country <> ''").where("city is not null and city <> ''").where(:users => {:merchant_status => 1}).group(:country, :city).select("country,city").as_json 

Es gibt:

EDIT

Um die Anzeige so etwas wie dieses Ausgabe wie

[{:country => "US", :city => "New York"}..] 

Wenn Sie wollen wieder Gruppe durch Land verwendet dann wie

cchs = @countries_cities.group_by{|cc| cc["country"]} 

als

@country_cities_hash = = Hash[*cchs] 

Ihrer Ansicht Datei Hash konvertieren oben mehrdimensionales Array mit

<% @country_cities_hash.each do |country, cities| %> 
    <li class="input"><a href="#"><%= country %></a></li> 
<% cities.each do |city| %> 
    <li class="input"><a href="#"><%= "#{city}(#{country})" %></a></li> 
    <% end %> 
<% end %> 
+0

Wie kann ich die Ansicht geändert, um Land> Stadt anzuzeigen? – d3bug3r

+0

bearbeitet Post für Viewfile –

+0

Das Ergebnis wird nicht richtig angezeigt .. – d3bug3r

1

Nicht Sicher, ich verstehe die Frage, aber ... ich denke, Sie haben eine Sammlung von Produkt, wie folgt aussehen:

produts = [ 
    <Product @name="p1", @country="US" @city="New York">, 
    <Product @name="p1", @country="US" @city="Boston">, 
    <Product @name="k2", @country="FR" @city="Paris">, 
    ... 
] 

In diesem Fall werden die Städtenamen nach Land Index:

@cities_by_coutry = products.inject({}) do |index, product| 
    index[product.country] ||= [] 
    index[product.country] << product.city 
    index 
end 

Welche führen:

{"US"=>["New York", "Boston"], "FR"=>["Paris"]} 

Dann können Sie iterieren:

@cities_by_coutry.each do |country, cities| 
    cities.each do |city| 
    puts "City: #{city} is in country {country}" 
    end 
end 
Verwandte Themen