【问题标题】:How to embed multiple tags in Rails routes, like Stack Overflow如何在 Rails 路由中嵌入多个标签,如 Stack Overflow
【发布时间】:2010-03-29 17:09:47
【问题描述】:
当人们在 Stack Overflow 上选择一个标签时,它会被添加到 URL 的末尾。添加第二个标签并将其添加到第一个标签之后的 URL 末尾,并带有 + 分隔符。例如:
http://stackoverflow.com/questions/tagged/ruby-on-rails+best-practices
这是如何实现的?这是路由增强还是TagsController 中包含的某些逻辑?最后,如何“提取”这些标签进行过滤(假设它们不在params[] 数组中)?
【问题讨论】:
标签:
ruby-on-rails
routing
tags
【解决方案1】:
Vojto 的回答是正确的,但请注意,您也可以在服务器端使用 Route Globbing 来干净地处理这个问题。定义为/:controller/*tags 的路由将匹配/questions/ruby/rails/routing,在questions_controller 中,params[:tags] 将是一个包含['ruby','rails','routing'] 的数组。请参阅Routing docs。
【解决方案2】:
我认为 Rails 不介意 params 是否包含 + 之类的符号。这意味着,您可以将所有标签作为一个参数访问,创建如下路由:'/show/:tags'
然后你就可以访问params[:tags],这将是像'ruby+rails'这样的字符串。你可以简单地通过'ruby+rails'.split('+') 把它变成一个数组。
这样您就可以轻松地将新标签添加到该数组中,并使用my_array_with_tags.join('+') 将其转回字符串。