使用 ransack 过滤器中的多个变量重写动态 URL

Rewrite dynamic URLs with multiple variables from ransack filter

我正在 Rails 上的 Ruby 中构建一个小项目(我对它的使用相当陌生)。 这个想法是有一个小列表网站,用户可以根据国家和类别过滤所有列表。

我使用 gem 搜索实现了过滤器并且它有效。

现在,我要改进的是用户过滤视图后的URLs,例如我的URL是这样的: domain.com/listings?utf8=%E2%9C%93&q%5Bcategory_eq%5D=sport&q%5Bcountry_eq%5D=Bosnia+and+Herzegovina

出于 SEO 原因,我想要漂亮、干净的 URLs。上面的例子将转化为(或这个方向的东西): 域名.com/listings/all/c/sport/d/波斯尼亚和黑塞哥维那

我安装了 gem rack rewrite 并获得了一些基本的重定向功能。但是我无法弄清楚规则需要如何才能实现上面的 URL 。特别是因为用户只能使用一个过滤器,这会导致 URL 像这样: 域名.com/listings/all/d/波斯尼亚和黑塞哥维那

有人有想法或遇到同样的问题吗?

您应该在 config/routes.rb:

中添加类似这样的内容
get 'listings/all/c/:category/d/:country', to: 'listings#search'

# if you want URLs with only country or only category
# also add these two
get 'listings/all/d/:country', to: 'listings#search'
get 'listings/all/c/:category', to: 'listings#search'

然后在您的 ListingsController#search 方法中(替换为您的实际控制器和方法名称):

# Let's say user opens "domain.com/listings/all/c/sport/d/Bosnia-and-Herzegovina
def search
  params[:category] # 'sport'
  params[:country] # Bosnia-and-Herzegovina
  # ... you code could use params above ...
end