2017-04-26 64 views
0

我使用friendy_id来加密我的网址。我的旧的URL中使用的样子如下:如何将旧的网址重定向到新的friendly_id在rails应用程序中生成的网址?

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 

现在我重定向老网址为404页。但是,我希望旧网址能够重定向到新的网址。我怎样才能做到这一点?我经历了一些解决方案。但是我的大控制器方法使其足够复杂,可以遵循这些解决方案。

回答

1

你可以试试这个:

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? 

如果你有子类,你可以用相同的条件下仅改变PARAMS categorysub-category

1

添加到您的方法search_equipments开始

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 
+0

在'begin'后添加下一行。但是当给出旧的url时,它仍然会404。 – user3576036

+0

不,在'begin'之前,因为我可能会犯一个错字错误,所以它会得到异常。发现未知的异常是一种坏习惯,你应该真的知道会发生什么。有时只是让它发生,所以你可以知道有什么问题。 –

+0

好吧,我在“开始”之前添加了它。你在回答中提到了'search_category_path'。我想你的意思是说'search_equipments_path',所以我改变了它。无论如何,所以现在当我给旧的url重定向到主页。 – user3576036

相关问题