有没有办法在路由参数中放置多个参数?

我有一个路线get '/catalog/:gender/' => 'catalog#gender':gender参数在我的控制器中使用,如@products = Product.where(gender: params[:gender]).all

所以我可以使用/catalog/male/来获取所有男性产品和/catalog/female/获得所有女性产品。 问题是,是否有人可以通过malefemale参数并获得所有产品?

您可以通过/catalog/all/获取所有产品,并在您的控制器中:

 if params[:gender] == "all" @products = Product.all else @products = Product.where(gender: params[:gender]) end 

或者渲染gender参数可选get '/catalog(/:gender)'然后在您的控制器中:

 if params[:gender] @products = Product.where(gender: params[:gender]) else @products = Product.all end 

要完成答案, 查询字符串也可以解决您的问题。

让我们创建一个路径/catalog/ ,并提交像/catalog?gender[]=male&gender[]=female这样的数组/catalog?gender[]=male&gender[]=female

 # params[:gender] = ["male", "female"] # SELECT "catalogs".* FROM "catalogs" WHERE "catalogs"."gender" IN ('male', 'female') @products = Catalog.where(gender: params[:gender]) 

答案来完成这个解决方案:

  • 在GET请求中为相同参数名称传递多个值的正确方法
  • 如何在查询字符串中传递数组?