Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3-url中的友好参数(GET)_Ruby On Rails_Url - Fatal编程技术网

Ruby on rails Rails 3-url中的友好参数(GET)

Ruby on rails Rails 3-url中的友好参数(GET),ruby-on-rails,url,Ruby On Rails,Url,我有一个rails 3应用程序,现在我为我的目录实现了过滤器。过滤器通过GET请求将数据传递给控制器。因此,在我提交后,我的浏览器中有这样的链接 我的表格(申请搜索): 有没有办法让URL更漂亮 PS我不想使用POST请求,因为我读到它对SEO有害如果你不想使用POST请求,那么就没有其他方法将表单值放入URL中——它们必须以某种方式到达服务器 然而,另一方面,我不明白为什么发帖子会对搜索引擎优化有害,我希望看到这样的文章。TLDR:别管它了 HTML表单以简单的方式序列化;参数以HTML元素命

我有一个rails 3应用程序,现在我为我的目录实现了过滤器。过滤器通过GET请求将数据传递给控制器。因此,在我提交后,我的浏览器中有这样的链接 我的表格(申请搜索):

有没有办法让URL更漂亮


PS我不想使用POST请求,因为我读到它对SEO有害

如果你不想使用POST请求,那么就没有其他方法将表单值放入URL中——它们必须以某种方式到达服务器

然而,另一方面,我不明白为什么发帖子会对搜索引擎优化有害,我希望看到这样的文章。

TLDR:别管它了

HTML表单以简单的方式序列化;参数以HTML元素命名。这里的实际问题是表单元素如何命名。看起来他们的名字像是
过滤器[ShoeBottomType][]
;查看HTML以查看
名称
属性。由于您在Rails中,我猜您将有一个筛选器散列作为单个参数传递给Rails控制器方法,并且由于Rails希望散列使用特定的URL进行散列和数组(它必须知道如何从请求中反序列化),因此表单帮助器以这种方式编写表单。您的操作尤其复杂,因为散列值是数组,因此需要额外的一组括号。然后它是URL编码的,你会得到一个丑陋的混乱

您可以通过将输入单独传递回控制器而不是作为一个大散列来避免一些问题。比如:

def index
  shoe_bottom_types = params[:bottom_types]
  shoe_classifications = params[:classifications]
  shoe_elations = params[:elations]
  ...
这将使您到达:
/shoes?bottomTypes[]=1和bottomTypes[]=2…
。这似乎没什么好的,现在你的控制器都很恶心。如果你想有多个相同的过滤器,我看不出你怎么能完全去掉括号。我想你可能会发疯,在你的控制器中做你自己的解析,比如分解
shoeBottomTypes=1 | 2
,但是你也必须做你自己的表单序列化。再说一次,就是不值得

备份一秒钟,搜索引擎优化的东西没有多大意义。搜索引擎不会填写你的表格;他们只关注链接。您应该使用GET的真正原因是(大概)提交表单没有副作用,因为它只是一个搜索。看见使用正确的HTTP方法很重要。如果你使用POST,你将在重新加载时收到奇怪的警告,并且你将无法为搜索添加书签

更进一步的备份,为什么你会在意,尤其是现在SEO已经不在考虑范围之内了?作为一个快速演示,我在谷歌上搜索了单词“thing”,这是URL:

因此表单提交的URL可能很长。用户甚至连看都不看

我能想到的唯一一种可能是,为什么你会关心你的URL的长度/丑陋,那就是你想要,与表单分开,创建指向特定搜索的链接。有几种方法可以解决这个问题,但因为我不知道这是否与你有关,所以我会继续跟进


所以,归根结底,这似乎是我所期望的,试图修复它听起来既丑陋又毫无意义。

我的建议是,你可以添加一些自定义路由来美化你的URL

例如:

这比您的初始URL短得多;)

据我所知,与之相对应的是,您必须在url中始终使用相同的参数顺序

路由规则如下所示:

match "shoes/Type/:type/Classification/:classification/Elation/:elation/LiningColor/:liningcolor/TopColor/:topcolor/only_action/:only_action/page/:page" => "shoes#show"

您可以在
params
数组中检索传递的值。您必须拆分包含
的字符串才能检索多个值。

例如,访问者访问站点,选择一些过滤器,查看结果,然后希望与他/她的朋友共享(获取链接)。在我的Loooong链接变体中,当friend打开此链接时,它会看到相同的结果。如果它将通过后工作-链接就像和朋友看到所有结果没有过滤。我希望我能解释清楚。例如,您可以将表单(或结果)保存到数据库,并返回一个ID作为某种永久链接机制(“
http://localhost/shoes?filter=25
”)。无论如何,我不认为这会对搜索引擎优化产生任何影响。我仍然希望看到这样的文章。我使用will_paginate gem(并将will_paginate绘制链接作为示例)。所以尝试使用will_paginate+ajax。如果您选择自定义序列化/字符串拆分路线,我会坚持使用URL参数:
shoes?type=2&classification=1,2&elation=3,4,5
。这将为您节省自定义路由和古怪的排序约束。另外,可能过滤器是可选的?
match "shoes/Type/:type/Classification/:classification/Elation/:elation/LiningColor/:liningcolor/TopColor/:topcolor/only_action/:only_action/page/:page" => "shoes#show"