2013-11-04 7 views
6

Wenn ein Benutzer einen vordefinierten Filterlink auswählt, wie würde mein Index Ergebnisse basierend auf dieser Anfrage anzeigen?Rails filtert Indexergebnisse über einen Link (ohne Dropdown)

Zum Beispiel, wie würde ich "Elektronik" -Link machen, um den Produktindex zu filtern, um nur Produkte mit einer Kategorie "Elektronik" einzuschließen? Das Feld "Kategorie" ist bereits in meiner Datenbank/meinem Modell definiert.

Dies ist zur Zeit, was mein Controller wie folgt aussieht:

def index 
    @products = Product.all 
end 

Dank.

Antwort

13

Machen Sie Ihre Links einen Link zurück zu den Produkten, aber Kategorie als URL-Parameter hinzufügen.

Dann in Ihrem Controller, wenn der Parameter vorhanden ist, Filter Ergebnisse basierend darauf. Wie zum Beispiel:

Ausblick:

<h2> Find Product by Category </h2> 
    <%= link_to "Electronics", products_path(:category=>"electronics") 

-Controller

def index 
    if params[:category] 
    @products = Product.where(:category => params[:category]) 
    else 
    @products = Product.all 
    end 
end 

Basierend auf Kommentar von egyamado:

Wenn Sie Flash-Mitteilungen hinzufügen möchten wäre es so etwas wie dieses:

def index 
    if params[:category] 
    @products = Product.where(:category => params[:category]) 
    flash[:notice] = "There are <b>#{@products.count}</b> in this category".html_safe 
    else 
    @products = Product.all 
    end 
end 

Wenn Sie nur die Meldung anzeigen möchten, dass keine Produkte vorhanden sind, fügen Sie einfach if @products.empty? am Ende der Flash-Bezeichnung

hinzu. Sie können auch eine vollständige Bedingung erstellen, wenn Sie eine Fehlermeldung anzeigen möchten, wenn keine Produkte vorhanden sind und eine Nachricht, wenn es Produkte gibt

def index 
    if params[:category] 
    @products = Product.where(:category => params[:category]) 
    if @products.empty? 
     flash[:error] = "There are <b>#{@products.count}</b> in this category".html_safe 
    else 
     flash[:notice] = "There are <b>${@products.count}</b> in this category".html_safe 
    end 
    else 
    @products = Product.all 
    end 
end 
+0

Genau das, was ich versucht habe zu kommen. Danke vielmals. –

+1

Alter ... Ich habe diese genaue Antwort gesucht, wie es nach zwei Monaten aussieht. Genaue Frage, perfekte Antwort. Sehr, sehr geschätzt. Scheint so einfach jetzt, dass ich es ansehe. – etusm

+0

Danke @trh, Stimme hoch. Wenn in Ihrer Lösung eine Kategorie ausgewählt ist, werden alle zugehörigen Produkte angezeigt. Wenn keine Kategorie ausgewählt wurde, zeigen Sie alle Produkte an. Aber, wie Sie eine Kategorie wählen, die keine Produkte hat, wo sagen wir, dass alle Produkte mit Flash-Nachricht sagen: "Keine Produkte für Elektronik verfügbar"? Danke! – egyamado

0

Vielen Dank für Ihren Beitrag. Es war perfekt für meine Bedürfnisse auch

Ich verwende es in einem Link <td><%= link_to 'Show', candidates_path(:atc_name=>(atc.name)) %></td>.

Verwandte Themen