我想知道在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的创造者之一,所以我想知道这是否真的和我做的一样大相信。
这种路由实现是否有任何严重的缺点,还是主要是旨在提高清晰度的风格约定?
答案 0 :(得分:3)
如果您使用GET进行销毁操作,则违反了spec for HTTP/1.1:
特别是,已经确定了GET和HEAD方法不具有采取除检索之外的动作的重要性的约定。这些方法应该被认为是“安全的”。这允许用户代理以特殊方式表示其他方法,例如POST,PUT和DELETE,以便使用户意识到正在请求可能不安全的操作。 (9.1.1)