使用 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
我正在 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