J'ai prétendu mes URL en utilisant friendy_id
. Mon vieux url regard utilisé comme ci-dessous:Comment rediriger les anciennes URL vers la nouvelle URL générée par friendly_id dans l'application rails?
localhost:3000/search?category_id=208
Maintenant, il ressemble à ceci:
localhost:3000/search?category_id=metal-processing-and-machine-tool
Mon contrôleur est la suivante:
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
En ce moment je suis redirigez vieux urls à 404 page. Mais au lieu de cela, j'aimerais que les anciennes URL redirigent vers de nouvelles URL. Comment puis-je atteindre cet objectif? J'ai traversé quelques solutions. Mais ma grande méthode de contrôleur le rend assez complexe pour suivre ces solutions.
Ajout de la ligne suivante après 'begin'. Mais ça continue à 404 quand on lui donne une vieille URL. – user3576036
non, avant le 'begin', parce que je pourrais faire une faute de frappe, donc il obtient une exception. et c'est une mauvaise habitude d'attraper une exception inconnue, vous devriez vraiment savoir ce qui pourrait arriver. Parfois, laissez-le se produire, de sorte que vous puissiez savoir quel est le problème. –
Okay je l'ai ajouté avant 'begin'. Vous avez mentionné 'search_category_path' dans votre réponse. Je pense que vous vouliez dire 'search_equipments_path' donc je l'ai changé. Quoi qu'il en soit, maintenant, quand je donne l'ancienne URL, il redirige vers la page d'accueil. – user3576036