为什么我的控制器会继续将我的link_to路由到" show"行动? Rails 4

时间:2015-02-06 07:58:24

标签: ruby-on-rails ruby-on-rails-4 routes

所以我很难过。我是Ruby on Rails的新手(我正在使用Rails 4)并且我一直试图弄清楚为什么我的link_to标记将我的login操作路由到show代替。我从控制器中删除了show操作,甚至删除了show.html.erb,但Rails仍然坚持尝试将其路由到不再存在的show操作。

我删除了所有redirect_to个功能,而我创建的link_to将我带到了正确的页面localhost:8000/users/login,但现在显示错误Unknown Action: The action 'show' could not be found for UsersController

我已经阅读了其他类似的SO问题,有些人认为这可能是jquery_ujs的问题,我从文件中删除了以查看是否是问题,但我仍然最终同样的结果。

views目录中的文件如下:

  • 的观点
    • 用户
      • new.html.erb
      • login.html.erb

这是我的代码:

用户/新中的link_to new.html.erb

<li><%= link_to "Login", users_login_path %></li>

的routes.rb

resources :users

root 'users#new'
get 'users/create'
get 'users/login'

users_controller.rb

class UsersController < ApplicationController
def new

end

def create
    @user = User.create(:username => params[:username], :password => params[:password])
    @user.save
    @users = User.all
end

def login
    @message = "Success"

end


end #end class

login.html.erb (只是在这里测试输出以查看它是否到达此页面)

<h3><%= @message %></h3>

输出佣金路线命令

    Prefix Verb   URI Pattern               Controller#Action
       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
             PATCH  /users/:id(.:format)      users#update
             PUT    /users/:id(.:format)      users#update
             DELETE /users/:id(.:format)      users#destroy
        root GET    /                         users#new
users_create GET    /users/create(.:format)   users#create
 users_login GET    /users/login(.:format)    users#login

1 个答案:

答案 0 :(得分:0)

我弄清楚问题是什么:

我需要从resources :users文件中删除routes.rb

现在一切都按预期工作了。在进行了一些研究后,似乎问题是resources :users在浏览器尝试访问页面时,他们尝试使用HTTP方法执行命令,这是GETPOSTPUTDELETEPATCH

当页面查找传入命令时,在这种情况下为GET /users/login,它会尝试将其映射到控制器操作。如果第一个匹配的路由是resources :users,则会将其发送到show操作。

这似乎是由于Rails使用的默认CRUD系统,其中每个HTTP方法代表一个CRUD操作(如果我错了,请纠正我):

GET is show
POST is create
DELETE is destroy
PATCH is update

我从Rails Routing from the Outside In, Section 2.1获得了大部分研究。