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

时间:2016-06-12 07:50:17

标签: ruby-on-rails routing

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

因此,我可以使用/catalog/male/获取所有男性产品,/catalog/female/获取所有女性产品。问题是,有没有人可以传递malefemale参数并获得所有产品?

1 个答案:

答案 0 :(得分:1)

您可以通过/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

要完成回答,Query string也可以解决您的问题。

让我们创建一个路由/catalog/,并提交一个类似/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])

完成此解决方案的答案:

相关问题