构造一个有效的路由

Structure a valid route

我的 Rails.application.routes

中有以下路线
get '/c/*name', :to => 'categories#show', :as => :filter_categories
get '/c/*name/*token', :to => 'categories#nest_products', :as => :nest_categories

和这个控制器

class CategoriesController < ApplicationController
  def show
    params[:name]
    @products, @filters = ProductFilterService.new(params[:name]).filter_by_taxon
    @selected_taxons = ProductFilterService.new(params[:name]).selected_taxons
  end

  def nest_products
    puts params[:token]
    render :show
  end
end

像这个例子一样尝试 localhost:3000/adidas/fH72VLNlAma2JWc,我想执行方法 nest_products 但总是转到方法显示。

只需像这样更改路由的声明顺序,因此如果您有 token 参数,它首先匹配 nest_categories

get '/c/*name/*token', :to => 'categories#nest_products', :as => :nest_categories
get '/c/*name', :to => 'categories#show', :as => :filter_categories

因为localhost:3000/adidas/fH72VLNlAma2JWc匹配两条路由,所以需要先声明最具体的。