Ruby on rails 为什么我的控制器一直将我的链接路由到;“显示”;行动?轨道4
所以我很困惑。我是RubyonRails的新手(我使用的是Rails 4),在过去的两天里,我一直在试图弄清楚为什么我的Ruby on rails 为什么我的控制器一直将我的链接路由到;“显示”;行动?轨道4,ruby-on-rails,ruby-on-rails-4,routes,Ruby On Rails,Ruby On Rails 4,Routes,所以我很困惑。我是RubyonRails的新手(我使用的是Rails 4),在过去的两天里,我一直在试图弄清楚为什么我的link\u to标签一直将我的login操作路由到show。我从我的控制器中删除了show操作,甚至删除了show.html.erb,但是Rails仍然坚持尝试将其路由到不再存在的show操作 我删除了所有的redirect\u to函数,我创建的链接将我带到正确的页面localhost:8000/users/login,但现在显示错误未知操作:找不到UsersControl
link\u to
标签一直将我的login
操作路由到show
。我从我的控制器中删除了show
操作,甚至删除了show.html.erb
,但是Rails仍然坚持尝试将其路由到不再存在的show
操作
我删除了所有的redirect\u to
函数,我创建的链接将我带到正确的页面localhost:8000/users/login
,但现在显示错误未知操作:找不到UsersController的“show”操作
我已经阅读了其他类似的SO问题,有人认为这可能是jquery_ujs的问题,我从文件中删除了它,以查看是否是问题,但我仍然得到了相同的结果
我的视图
目录中的文件如下:
- 观点
- 使用者
- new.html.erb
- login.html.erb
我的代码是这样的:
用户/new中的链接(new.html.erb)
用户\u控制器.rb
<li><%= link_to "Login", users_login_path %></li>
resources :users
root 'users#new'
get 'users/create'
get 'users/login'
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
我发现了问题所在:
我需要从routes.rb
文件中删除resources:users
现在一切正常。在做了一点研究之后,似乎拥有资源的问题在于:用户在浏览器试图访问页面时,他们试图使用HTTP方法执行命令,即GET
,POST
,PUT
,DELETE
,或PATCH
当页面查找传入命令(在本例中为GET/users/login
)时,它尝试将其映射到控制器操作。如果第一个匹配路由是resources:users
,它将把它发送到show
操作
这似乎是由于Rails使用默认的CRUD系统,其中每个HTTP方法表示一个CRUD操作(如果我错了,请纠正我):
这项研究的大部分内容都来自。发布rake路由的结果
command@RSB现在根据请求添加了它。不要将HTTP动词与特定的CRUD操作混淆(并非总是如此)。当然,DELETE是destroy,POST通常是create,但通常用于“简单”创建之外的其他用途,PUT/PATCH是update,但糟糕的旧GET几乎是任何东西-index视图是对GET的响应,show是对GET的响应,只要该操作是幂等的(不改变服务器端的任何东西),任何东西都可以是对GET的响应@railsdog我想可能是因为我的view/users
文件夹缺少index.html.erb
文件,它可能已经将GET
请求映射到show
,但我不能确定(我确实说过“如果我错了,请纠正我!”)。我现在正在阅读,想知道为什么它可能是映射到show
。稍后我将为大家发布我的发现。路由工作基于HTTP方法和URL模式匹配的组合。使用参考资料:routes.rb GET users/1和GET users/login中的用户都将匹配路由中的第一个路由,这是一个GET方法,看起来像“users/something”。就路由而言,“1”可以是“某物”,“login”可以是“某物”,匹配的第一条路由是show。如果将resources:users放在自定义路由之后会发生什么?IIRC,在这种情况下,您的用户/登录名将只匹配用户/登录名,而用户/1应匹配显示路线。
<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
GET is show
POST is create
DELETE is destroy
PATCH is update