ruby-on-rails – 将多个动作路由到同一个控制器和动作
我想在我的Rails应用程序上运行这样的东西:
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”路由,因为它已经在上面的路线上匹配了. 他:他对路由器来说都是希腊人;) 编辑:
是的,“/ 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应该反映资源(在这种情况下是一组帖子)其他一切最好作为查询参数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 解决vue中使用Axios调用接口时出现的ie数据处理问题
- ajax小demo---CORS的原理分析及简单使用
- ruby-on-rails – 如何测试Rails / Capybara / Cucumber或R
- xml中${}的使用含义(美元符号大括号,以Spring、ibatis、my
- XStream解析复杂XML
- Ajax调用restful接口传送Json格式数据的方法
- oracle 合并多个sys_refcursor
- flash – 在AS3方法中接受多个参数
- ruby – 使用uuidtools在Rails中生成一个简短的UUID字符串
- c# – 如何使用LINQ查询不包含来自另一个列表的子字符串条目