【问题标题】:Why use match rather than get when routing in Rails?为什么在 Rails 中路由时使用 match 而不是 get?
【发布时间】:2011-12-23 18:31:22
【问题描述】:

在 Ruby on Rails 3 教程中,代码使用:

match '/signup',  :to => 'users#new'
match '/signin',  :to => 'sessions#new'
match '/signout', :to => 'sessions#destroy'

match '/contact', :to => 'pages#contact'
match '/about',   :to => 'pages#about'
match '/help',    :to => 'pages#help'

而不是

get '/signup',  :to => 'users#new'
get '/signin',  :to => 'sessions#new'
get '/signout', :to => 'sessions#destroy'

get '/contact', :to => 'pages#contact'
get '/about',   :to => 'pages#about'
get '/help',    :to => 'pages#help'

即使所有路由都只需要 HTTP GET 动词。为什么不使用get(或:via => [:get] on match)并将路由操作限制为实践问题?

【问题讨论】:

    标签: ruby-on-rails-3 routes railstutorial.org


    【解决方案1】:

    我认为最好使用get [...] 而不是match。正如您已经正确提到的,match 将创建 GET 和 POST 路由。如果您不需要它们,为什么要创建它们?

    使用正确的匹配器(get 或 post)可以使您的路由保持干净,并有助于防止您的应用程序出现不必要的行为。后一点尤其适用于 POST 路由,您不希望在网页上意外放置一个 GET 请求链接,该链接可能会被搜索机器人跟踪。

    更新 [2013-05-12]: 从 Rails 4.0 开始,您现在是 required to explicitly specifiy the request method

    【讨论】:

    • rails 4.0 更新 +1。感谢您花时间更新旧答案。
    • 现在猜猜match 如果您有用于多个 http 动词的路由。
    • @PetrosKyriakou 为什么会这样?我知道,使用框架的最佳实践有时会发生变化。但是,我认为这里不是这种情况。如果您想同时提供 getpostroutes,请使用 getpost 关键字分别定义它们。正如更新的答案中提到的,Rails 现在甚至强制您定义请求方法。我不知道这方面最近有什么变化。
    • @emrass 好的考虑以下,match 'post/:id' => 'post#[action_name]', via: [:get, :post] 不是比单独写更好吗?分别编写它们的几乎 DRY 原则在哪里,匹配并非适用于所有情况,而是适用于可以组合的情况,所以如果您可以选择将两条路线组合成一行,为什么不这样做呢? P.S 我无法为 action_name 起个好名字,但请查看此帖子,http://stackoverflow.com/questions/19722822/route-issue-in-rails-4-about-match-keyword-working-in-rails-3
    • @PetrosKyriakou 现在我明白你的意思了。你是对的 - match 现在强制你指定请求类型,所以你不能“意外”创建你不打算使用的路由。我同意 match 现在是在一个语句中生成多种请求类型的好方法。
    猜你喜欢
    • 2013-03-04
    • 2016-12-23
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    相关资源
    最近更新 更多