如何将旧网址重定向到 rails 应用程序中新生成的 friendly_id 网址?
How to redirect old urls to new friendly_id generated urls in rails app?
我使用 friendy_id
美化了我的 url。我的旧 url 使用如下所示:
localhost:3000/search?category_id=208
现在看起来像这样:
localhost:3000/search?category_id=metal-processing-and-machine-tool
我的控制器是这样的:
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
现在我正在将旧 url 重定向到 404 页面。但相反,我希望旧的 urls 重定向到新的 urls。我怎样才能做到这一点?我经历了一些解决方案。但是我的大控制器方法使它变得足够复杂以遵循这些解决方案。
将此添加到您的方法中 search_equipments
beginning
if params[:category_id].present? and params[:category_id].to_s !~ /\D/
category = Category.find_by_id(params[:category_id])
return redirect_to search_equipments_path(category_id: category.name.parameterize) if category.present?
end
你可以试试这个:
if params[:category_id].present? and params[:category_id].to_s !~ /\D/
category = Category.find_by_id(params[:category_id])
return redirect_to search_equipments_path(request.query_parameters.merge(category_id: category.name.parameterize)) if category.present?
如果您有子类别,您可以使用相同的条件,只需将参数 category
更改为 sub-category
。
我使用 friendy_id
美化了我的 url。我的旧 url 使用如下所示:
localhost:3000/search?category_id=208
现在看起来像这样:
localhost:3000/search?category_id=metal-processing-and-machine-tool
我的控制器是这样的:
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
现在我正在将旧 url 重定向到 404 页面。但相反,我希望旧的 urls 重定向到新的 urls。我怎样才能做到这一点?我经历了一些解决方案。但是我的大控制器方法使它变得足够复杂以遵循这些解决方案。
将此添加到您的方法中 search_equipments
beginning
if params[:category_id].present? and params[:category_id].to_s !~ /\D/
category = Category.find_by_id(params[:category_id])
return redirect_to search_equipments_path(category_id: category.name.parameterize) if category.present?
end
你可以试试这个:
if params[:category_id].present? and params[:category_id].to_s !~ /\D/
category = Category.find_by_id(params[:category_id])
return redirect_to search_equipments_path(request.query_parameters.merge(category_id: category.name.parameterize)) if category.present?
如果您有子类别,您可以使用相同的条件,只需将参数 category
更改为 sub-category
。