2016-06-12 2 views
0

Ich habe eine Route get '/catalog/:gender/' => 'catalog#gender'. Der :gender Parameter wird in meinem Controller so verwendet @products = Product.where(gender: params[:gender]).all.Gibt es eine Möglichkeit, mehrere Parameter in Routing-Parameter zu setzen?

So kann ich /catalog/male/ verwenden, um alle männlichen Produkte und /catalog/female/ alle weiblichen Produkte zu erhalten. Die Frage ist, gibt es einen Weg, jemand könnte sowohl male und female Parameter übergeben und alle Produkte bekommen?

Antwort

1

Sie können /catalog/all/ passieren, um alle Produkte zu erhalten, und in Ihrem Controller:

if params[:gender] == "all" 
    @products = Product.all 
else 
    @products = Product.where(gender: params[:gender]) 
end 

Oder gender params optional get '/catalog(/:gender)' machen und dann in Ihrem Controller:

if params[:gender] 
    @products = Product.where(gender: params[:gender]) 
else 
    @products = Product.all 
end 

Um Antwort zu vervollständigen , Query string kann Ihr Problem auch lösen.

Lassen Sie uns eine Route erstellen /catalog/, und senden Sie ein Array wie /catalog?gender[]=male&gender[]=female.

# params[:gender] = ["male", "female"] 
# SELECT "catalogs".* FROM "catalogs" WHERE "catalogs"."gender" IN ('male', 'female') 
@products = Catalog.where(gender: params[:gender]) 

Antworten diese Lösung vervollständigen:

+0

Danke. Aber ich habe mich gefragt, ob jemand möglicherweise nur wenige Parameter an den Link übergeben und nur wenige Kategorien des Produkts erhalten könnte. Ich denke, die Antwort ist "Nein". – Viktor

Verwandte Themen