Rails routes 莫名的出错

xguox · 发布于 2012年3月06日 · 最后由 zhangyuxiu 回复于 2013年1月09日 · 3060 次阅读
333

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
共收到 14 条回复
96
hisea · #1 · 2012年3月06日

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

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

96
hhuai · #2 · 2012年3月06日

把你的view代码看一下。

96
hhuai · #3 · 2012年3月06日

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

333
xguox · #4 · 2012年3月06日

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

333
xguox · #5 · 2012年3月06日

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

96
hhuai · #6 · 2012年3月06日

#5楼 @xguox login action对应的view

333
xguox · #7 · 2012年3月06日

@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>
157
raven · #8 · 2012年3月06日

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

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

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

333
xguox · #9 · 2012年3月06日

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

16
ywencn · #10 · 2012年3月06日

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

333
xguox · #11 · 2012年3月06日

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

96
hhuai · #12 · 2012年3月06日

form_for(:session, url => sessions_path)

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

333
xguox · #13 · 2012年3月06日

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

5191
zhangyuxiu · #14 · 2013年1月09日

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

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