如果'我在浏览器中输入了URL,我收到路由错误,但是如果我点击指向该URL的链接,则可以正常工作。为什么会这样?
devise_for :user, :skip => [:registrations, :sessions] do
get 'signup' => 'devise/registrations#new', :as => :new_user_registration
post 'signup/:invitation_token' => 'devise/registrations#create', :as => :user_registration
get 'signin' => 'devise/sessions#new', :as => :new_user_session
post 'signin' => 'devise/sessions#create', :as => :user_session
delete 'signout' => 'devise/sessions#destroy', :as => :destroy_user_session
end
例如,如果我在浏览器中键入localhost:3000 / signout,我将收到错误消息。但如果有链接
<%= link_to "Logout", destroy_user_session_path, :method => :delete %>
它会起作用。其他定制路线也是如此。
答案 0 :(得分:1)
如果您阅读Devise source code,您将看到各种HTTP请求调用各种Devise控制器操作。
例如,新的sign_in
方法是GET
请求:
# GET /resource/sign_in
但新用户会话的实际创建是POST
请求:
# POST /resource/sign_in
sign_out
方法是DELETE
请求:
# DELETE /resource/sign_out
在这三种请求类型(GET
,POST
和DELETE
)中,只需在浏览器中输入网址即可生成GET
次请求两种类型需要特定的HTTP标头通常在表单,链接等中设置。
the source code中的内联文档提供了访问每个Devise控制器方法所必需的精确请求类型...我建议你看看。
答案 1 :(得分:0)
手动输入URL时出现路由错误,因为Web浏览器默认发送GET请求。您的链接示例是根据:method => :delete
创建DELETE请求。所以动词(GET vs DELETE vs PATCH vs POST)也必须匹配路线。您可以通过运行rake routes
专门为您的应用看到此说明。您将看到网址以及请求类型/动词。
如果您想提出类似的DELETE请求,可以使用curl进行调查:http://blogs.plexibus.com/2009/01/15/rest-esting-with-curl/