Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么我的控制器一直将我的链接路由到;“显示”;行动?轨道4_Ruby On Rails_Ruby On Rails 4_Routes - Fatal编程技术网

Ruby on 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

所以我很困惑。我是RubyonRails的新手(我使用的是Rails 4),在过去的两天里,我一直在试图弄清楚为什么我的
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