【问题标题】:Rails routes errorRails 路线错误
【发布时间】:2026-02-15 19:10:01
【问题描述】:

我跟随 Michael Hartl 的 Ruby on Rails Tutorial 2nd Edition 并已到达本书的登录/注销部分。

到目前为止,我可以创建一个新用户(或者在我的情况下为房东)并使用新凭据登录。我遇到的问题是退出时。我单击“退出”并收到一条路线错误消息:

没有路由匹配 [GET] "/signout"

下面是代码 sn-ps。任何帮助将不胜感激!

rake 路由输出

landlords GET    /landlords(.:format)           landlords#index
               POST   /landlords(.:format)           landlords#create
  new_landlord GET    /landlords/new(.:format)       landlords#new
 edit_landlord GET    /landlords/:id/edit(.:format)  landlords#edit
      landlord GET    /landlords/:id(.:format)       landlords#show
               PUT    /landlords/:id(.:format)       landlords#update
               DELETE /landlords/:id(.:format)       landlords#destroy
    properties GET    /properties(.:format)          properties#index
               POST   /properties(.:format)          properties#create
  new_property GET    /properties/new(.:format)      properties#new
 edit_property GET    /properties/:id/edit(.:format) properties#edit
      property GET    /properties/:id(.:format)      properties#show
               PUT    /properties/:id(.:format)      properties#update
               DELETE /properties/:id(.:format)      properties#destroy
      sessions POST   /sessions(.:format)            sessions#create
   new_session GET    /sessions/new(.:format)        sessions#new
       session DELETE /sessions/:id(.:format)        sessions#destroy
          root        /                              content_pages#home
content_pages_home GET    /content_pages/home(.:format)  content_pages#home
          help        /help(.:format)                content_pages#help
     questions        /questions(.:format)           content_pages#questions
        signup        /signup(.:format)              landlords#new
        signin        /signin(.:format)              sessions#new
       signout DELETE /signout(.:format)             sessions#destroy

routes.rb 文件

  resources :landlords
  resources :properties
  resources :sessions, only: [:new, :create, :destroy]

  root :to => 'content_pages#home'

  get "content_pages/home"

  match '/help', to: 'content_pages#help'
  match '/questions', to: 'content_pages#questions'
  match '/signup', to: 'landlords#new'
  match '/signin', to: 'sessions#new'
  match '/signout', to: 'sessions#destroy', via: :delete

退出链接

<%= link_to "Signout", signout_path, method: "delete" %>

会话控制器

def destroy
  sign_out
  redirect_to root_path
end

【问题讨论】:

  • 会话助手中有sign_out 方法吗?查看书籍/网站中的清单 8.30。控制器的destroy方法正在寻找它。
  • 是的,我在会话助手 'def sign_out self.current_landlord = nil cookies.delete(:remember_token) end'中有一个注销方法
  • 嘿@TonyStaunton 答案对你有用吗?我仍然有同样的问题。

标签: ruby-on-rails railstutorial.org


【解决方案1】:

以下代码中的via: 选项将请求限制为删除方法:

match '/signout', to: 'sessions#destroy', via: :delete

您需要制作一个适用于“get”方法的工具

查看Rails Routing guide

【讨论】: