J'implémente friendly_id
sur un code source existant. Le scénario est comme ça. Il y a category
noms sur la page d'accueil. Lorsque l'utilisateur clique sur l'un de ces liens Catégories, il les amène à une page lorsqu'il a des produits sous cette catégorie. Cette page a une pagination. L'URL précédente avait category_id=number
maintenant après la mise en œuvre friendly_id
J'ai obtenu l'URL en tant que .L'URL friendly_id ne s'applique pas à la pagination.
Old url:
localhost:3000/search?category_id=208
Nouvelle URL:
localhost:3000/search?category_id=name
Cette URL a pagination.
Le problème est lorsque je clique sur la 2ème page sur cette URL, il a toujours la même vieille URL avec le numéro d'identification comme ci-dessous.
localhost:3000/search?category_id=208&page=2
Je sais que je suis manque quelque chose. Quelqu'un pourrait-il me dire comment résoudre ce problème? Voici mon contrôleur. C'est ce qui se passe quand vous essayez d'implémenter de nouvelles choses sur du code existant. Veuillez vérifier la fin de la ligne où il y apour la pagination. Faites-moi savoir si plus d'informations sont nécessaires.
contrôleur
def search_equipments
begin
if (params.keys & ['category_id', 'sub_category', 'manufacturer', 'country', 'state', 'keyword']).present?
if params[:category_id].present?
@category = Category.active.friendly.find_by_friendly_id params[:category_id]
else
@category = Category.active.friendly.find_by_friendly_id params[:sub_category] if params[:sub_category].present?
end
@root_categories = Category.active.roots
@sub_categories = @category.children.active if params[:category_id].present?
@sub_categories ||= {}
@countries = Country.active.all
@manufacturers = Manufacturer.active.all
@states = State.active.where("country_id = ?", params[:country]) if params[:country].present?
@states ||= {}
unless params[:category_id].present? && params[:sub_category].present?
params[:category_id] = @category.id if params[:category_id].present?
params[:sub_category] = @category.id if params[:sub_category].present?
end
@equipments = Equipment.active.filter(params.slice(:manufacturer, :country, :state, :category_id, :sub_category, :keyword)).order("#{sort_column} #{sort_direction}, created_at desc").page(params[:page]).per(per_page_items)
else
redirect_to root_path
end
rescue Exception => e
render :file=>"#{Rails.root}/public/404.html",:status=>404
end
end
Dans le modèle, je passe '<% = search_equipments_path (: category_id => category.slug)%>'. Donc, cela fonctionne bien avant de cliquer sur la page suivante. Quand je clique sur la page suivante. Son retour à l'ancienne URL. – user3576036
Si je passe 'params [: category_id] = @ category' juste au dessus de' @ equipments', le friendly_id travaille sur la pagination de catégorie maintenant. Mais pas pour la sous-catégorie. – user3576036