match '/:language',:to => 'posts#search_result'match '/:tag',:to => 'posts#search_result'match '/:language/:tag',:to => 'posts#search_result'
我正在使用此search_result *** 作根据语言和标记过滤一些帖子.
问题是有时候:标签将为零或:语言将为零;所以我在调用动作时有以下3种可能性:
<%=link_to "Spanish",{:controller => 'posts',:action => 'search_result',:language => "spanish"} %><%= link_to "Spanish",:language => "spanish",:tag => @tag} %><%=link_to "#{tag.name}",:tag => @tag} %>
我希望有以下网址:
/spanish (for the first case)/spanish/rails (where rails is a tag,for the second case)/rails (for the third case)
但是现在我得到了第一和第三种情况的严格要求,但对于我得到的第二种情况:
/西班牙语吗?标签=轨道
或再次/西班牙语(取决于我是先选择标签还是先选择语言).
我希望我能正确解释自己.任何的想法??.谢谢!.
解决方法 路由器无法区分a:language和a:tag.只是因为当您在视图中构建代码时,您的路由会说“语言”和“标记”.请记住,在HTML中,这已经被翻译成普通的简单URL,例如/ spanish或/ rails
然后必须从该URL中找出路线.
现在正如我所说,路由器无法判断某个特定单词是一种语言还是一个标签…而且plain-ole-URL中不再包含“tag”或“language”这个词……所以你的两条路线在这里:
match '/:language',:to => 'posts#search_result'
都是相同类型的URL
斜杠后只有一个标记.以下是一些与该路线匹配的示例:
/greek/spanish/rails/urdu/whatever
它们都将匹配匹配“斜杠后的单个令牌”的第一条路线…这意味着您的路由器将所有路由与“语言”路由匹配,并且永远不会匹配“/:tag”路由,因为它已经在上面的路线上匹配了.
他:他对路由器来说都是希腊人;)
编辑:
Hi,this is helPing me a lot to understand how routing works.. but still i can’t see it clear. I understand what you saID,and so basically i understand i should do something like match ‘/Tags/:tag to at least only route to posts#search_result the URLS starting by /tag .. what would be a solution??
是的,“/ Tags /:tag”是清晰明确的,但是如果你希望它在标签与语言中真正灵活,你可以通过简单的方式获得更好的服务:
match '/posts/search',:to => 'posts#search_result'
可以使用上面的任何link_to示例生成例如:
/posts/search?tag=rails/posts/search?language=spanish/posts/search?language=spanish&tag=rails
什么被传递以及为什么会更清楚.
第三个URL的描述是“我正在搜索一组有语言= spanish和tag = rails的帖子”
您的URL应该反映资源(在这种情况下是一组帖子)其他一切最好作为查询参数.
总结以上是内存溢出为你收集整理的ruby-on-rails – 将多个动作路由到同一个控制器和动作全部内容,希望文章能够帮你解决ruby-on-rails – 将多个动作路由到同一个控制器和动作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)