为什么我的控制器一直将我的 link_to 路由到 "show" 操作? Rails 4

Why does my controller keep routing my link_to toward "show" action? Rails 4

所以我很困惑。我是 Rails 上 Ruby 的新手(我正在使用 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目录下的文件如下:

我的代码如下所示:

users/new中的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>

rake 路由命令的输出

    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

我知道问题出在哪里了:

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

现在一切正常。在做了一些研究之后,似乎 resources :users 的问题在于当浏览器尝试访问页面时,他们尝试使用 HTTP 方法执行命令,该方法是 GET , POST, PUT, DELETE, 或 PATCH.

当页面查找传入命令(在本例中为 GET /users/login)时,它会尝试将其映射到控制器操作。如果第一个匹配的路由是 resources :users,它将把它发送到 show 动作。

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

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

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