所以我很难过。我是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
目录中的文件如下:
这是我的代码:
用户/新中的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
答案 0 :(得分:0)
我弄清楚问题是什么:
我需要从resources :users
文件中删除routes.rb
。
现在一切都按预期工作了。在进行了一些研究后,似乎问题是resources :users
在浏览器尝试访问页面时,他们尝试使用HTTP方法执行命令,这是GET
,POST
,PUT
,DELETE
或PATCH
。
当页面查找传入命令时,在这种情况下为GET /users/login
,它会尝试将其映射到控制器操作。如果第一个匹配的路由是resources :users
,则会将其发送到show
操作。
这似乎是由于Rails使用的默认CRUD系统,其中每个HTTP方法代表一个CRUD操作(如果我错了,请纠正我):
GET is show
POST is create
DELETE is destroy
PATCH is update