Rails routes 莫名的出错

xguox · 2012年03月06日 · 最后由 zhangyuxiu 回复于 2013年01月09日 · 5121 次阅读

localhost:3000/login 显示下面的错误提示。

Routing Error
No route matches {:action=>"destroy", :controller=>"sessions"}
Try running rake routes for more information on available routes.

请问这是什么情况?SessionsController 有定义 destroy 这个 action 呀 PS:这是我跟着 Ruby on Rails Tutorial 写的一个小项目。StackOverflow 上貌似也有人提问,不过回答好像没看明白。貌似没正解

rake routes 如下:

   users         GET            /users(.:format)                users#index
                   POST              /users(.:format)          users#create
   new_user GET    /users/new(.:format)      users#new
  edit_user GET    /users/:id/edit(.:format) users#edit
       user GET    /users/:id(.:format)      users#show
            PUT    /users/:id(.:format)      users#update
            DELETE /users/:id(.:format)      users#destroy
   sessions POST   /sessions(.:format)       sessions#create
new_session GET    /sessions/new(.:format)   sessions#new
    session DELETE /sessions/:id(.:format)   sessions#destroy
     signup        /signup(.:format)         users#new
      login        /login(.:format)          sessions#new
     logout DELETE /logout(.:format)         sessions#destroy
       help        /help(.:format)           pages#help
      about        /about(.:format)          pages#about
    contact        /contact(.:format)        pages#contact
       home        /home(.:format)           pages#home
     comics        /comics(.:format)         pages#comics
  animation        /animation(.:format)      pages#animation
       root        /                         pages#home

routes.rb 如下

resources :sessions, only: [:new, :create, :destroy]
match '/signup',  to: 'users#new'
match '/login',  to: 'sessions#new'
match '/logout', to: 'sessions#destroy', via: :delete

能把 log 里面 request 的整个 log 都发出来么。

我奇怪的是为什么 login 显示 没有 delete action,是被 redirect 了么

把你的 view 代码看一下。

#1 楼 @hisea 这很有可能的,比如包含了 logout 链接。

#1 楼 @hisea 啊?新手表示不知道怎么查看 request 的整个 log。log 目录下只有 developmen、test、production 这几个 log 文件

#2 楼 @hhuai 是 sessions 对应的 view 吗?

#5 楼 @xguox login action 对应的 view

@hhuai

<% provide :title,"Log in" %>
<h1>Log in</h1>
<%= form_for(:session,url:session_path) do |f| %>
    <div class="field">
        <%= f.label :email %><br/>
        <%= f.text_field :email %>
    </div>
    <div class="field">
        <%= f.label :password %><br/>
        <%= f.text_field :password %>
    </div>
    <div class="actions">
        <%= f.submit "Log in" %>
    </div>
    <% end %>
    <p>
        New user?<%= link_to "Sign up now~~",signup_path %>
    </p>

session DELETE /sessions/:id(.:format) sessions#destroy

八成是你这个 ROUTE 的 method 不是 DELETE

e.g. link_to "xx", session_path, :method => :delete

#8 楼 @raven e...新手表示还没掌握好 route 的一些知识,能具体的说说么?

路由是撞上了的,你没有 sessions 控制器和 destroy action,才会是这样的报错

#10 楼 @ywencn 啊?虾米意思?我有 sessions 这个 controller 也定义了 destroy 这个 action 呀

form_for(:session, url => sessions_path)

你确定不是这里少写了个 s, 是 sessions_path,非 session_path

#12 楼 @hhuai eeeeeeeeeee。。。。94 这里了。感谢感谢,谢谢楼上诸位。太粗心了

您好,向您请教:<%= form_tag sessions_path do %> 这句是什么意思啊?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号