是否在Rails routes.rb危险/不良做法中将'GET'请求映射到'controller#destroy'?

时间:2013-08-12 21:26:40

标签: ruby-on-rails get routing crud rails-routing

我想知道在Rails中使用映射到'destroy'操作的GET请求的约定是什么。我正在查看RailsCast on authentication并且Ryan选择将GET请求映射到会话#dump动作,以便他可以使用简单的锚标记链接到它,而不是使用form_for / button_to帮助程序生成按钮包含_method:delete属性:

Auth::Application.routes.draw do  
  get "log_in" => "sessions#new", :as => "log_in"  
  get "log_out" => "sessions#destroy", :as => "log_out"  

  get "sign_up" => "users#new", :as => "sign_up"  
  root :to => "users#new"  
  resources :users  
  resources :sessions  
end  

我的印象是,这不是应该如何完成的,但Ryan Bates是Rails的创造者之一,所以我想知道这是否真的和我做的一样大相信。

这种路由实现是否有任何严重的缺点,还是主要是旨在提高清晰度的风格约定?

1 个答案:

答案 0 :(得分:3)

如果您使用GET进行销毁操作,则违反了spec for HTTP/1.1

  

特别是,已经确定了GET和HEAD方法不具有采取除检索之外的动作的重要性的约定。这些方法应该被认为是“安全的”。这允许用户代理以特殊方式表示其他方法,例如POST,PUT和DELETE,以便使用户意识到正在请求可能不安全的操作。 (9.1.1)