加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 将多个动作路由到同一个控制器和动作

发布时间:2020-12-17 03:00:50 所属栏目:百科 来源:网络整理
导读:我想在我的Rails应用程序上运行这样的东西: match '/:language',:to = 'posts#search_result'match '/:tag',:to = 'posts#search_result'match '/:language/:tag',:to = 'posts#search_result' 我正在使用此search_result操作根据语言和标记过滤一些帖子.
我想在我的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”路由,因为它已经在上面的路线上匹配了.

他:他对路由器来说都是希腊人;)

编辑:

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应该反映资源(在这种情况下是一组帖子)其他一切最好作为查询参数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读