有没有办法在路由参数中放置多个参数?
我有一个路线get '/catalog/:gender/' => 'catalog#gender'
。 :gender
参数在我的控制器中使用,如@products = Product.where(gender: params[:gender]).all
。
所以我可以使用/catalog/male/
来获取所有男性产品和/catalog/female/
获得所有女性产品。 问题是,是否有人可以通过male
和female
参数并获得所有产品?
您可以通过/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请求中为相同参数名称传递多个值的正确方法
- 如何在查询字符串中传递数组?