2017-09-07 2 views
0

J'ai plusieurs itinéraires qui pointent vers une seule action de commande comme ceci:Ruby on Rails - Kaminari Défaillant à l'URL Mauvaise

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' 

Ma requête ressemble à ceci:

@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) 

Si Je suis sur la page des piles elliptiques (ou l'une des autres pages qui utilisent la même action du contrôleur) et je sélectionne la page suivante ou un numéro de page, l'url demandé est toujours l'uri des moteurs elliptiques avec mon nouveau numéro de page. Il semble que Kaminari saisisse la première route parce que lorsque je change cette route dans le fichier de route, la pagination reçoit les changements de requête en conséquence. Y a-t-il un travail pour cela sans changer ma structure de routage actuelle?

Répondre

1

Je pense qu'une seule route est nécessaire, mais vous devez envoyer des paramètres pour répartir les requêtes en action. Comme ça:

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

Et dans votre contrôleur:

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

J'espère que cela vous aidera

+0

Je suis d'avoir à maintenir Classement SEO sur une structure d'URL mal configurée. Je dois assigner statiquement ces URLs aux actions de contrôleur dans mes itinéraires afin de faire fonctionner les choses. Je n'ai pas un moyen de contourner le routage pour le moment. –

1

peut-être pas la meilleure solution, mais vous pouvez essayer ce qui suit, mais il faudrait être la dernière route spécifiée:

get '* path' => redirect ('/ Recherche /: type')