2017-09-07 3 views
0

ich mehrere Routen haben, die wie folgt zu einem einzigen Controller-Aktion zeigen:Ruby on Rails - Kaminari Säumigen an die falsche URL

get '/elliptical-incline-motors', to: 'search#category_search' 
get '/incline-ramp-wheels', to: 'search#category_search' 
get '/elliptical-drive-belt', to: 'search#category_search' 
get '/elliptical-batteries', to: 'search#category_search' 

Meine Frage wie folgt aussieht:

@products = Product.joins(category_model: {category_brand: :category}).where("categories.name = ? AND products.status = ?", category, "Viewable On Website & Backend").order(popularity: :desc).page(page).per(25) 

Wenn Ich bin auf der Seite der elliptischen Batterien (oder einer der anderen Seiten, die die gleiche Controller-Aktion verwenden) und wähle die nächste Seite oder eine Seitennummer, die angeforderte URL ist immer die Ellipsen-Neigung-Motoren-URI mit meiner neuen Seitennummer. Es sieht so aus, als ob Kaminari die erste Route ergreift, denn wenn ich diese Route in der Routendatei ändere, ändert sich die Paginierungsanfrage entsprechend. Gibt es dafür eine Lösung, ohne meine aktuelle Routing-Struktur zu verändern?

Antwort

1

Ich denke nur eine Route ist notwendig, aber Sie sollten params senden, um Abfragen in Aktion zu senden. Wie folgt aus:

get '/search/:type', to: 'search#category_search' 

Und in Ihrem Controller:

case params[:type] 
when "elliptical-incline-motors" 
    method 1 
when "incline-ramp-wheels" 
    method 2 
etc.... 
end 

Ich hoffe, es wird Ihnen helfen,

+0

ich habe zu halten die letzte Strecke angegeben werden SEO Ranking auf einer schlecht konfigurierten URL-Struktur. Ich muss diese URLs den Controller-Aktionen in meinen Routen statisch zuweisen, damit die Dinge funktionieren. Im Moment habe ich keinen Weg um den Router herum. –

1

vielleicht nicht die beste Lösung, aber man konnte die folgende versuchen, obwohl es haben würde,

get '* path' => Umleitung

('/ search /:: type')