找不到路由错误和操作
Routing Errors & Actions not Found
我正在 Rails 上学习关于 Ruby 的教程,我准备好自杀了。
第一个问题:
applications/html/erb 它一直告诉我“找不到 Rails 操作 'index'、'about' 和 'help'。但是当我在 localhost3000/site/index我可以很好地浏览页面。知道为什么它告诉我找不到操作吗?
<!DOCTYPE html>
<html>
<head>
<title><%= @title %></title>
<%= stylesheet_link_tag 'application.css' %>
</head>
<body>
<div id="whole_page">
<div id="header">Work<b>Link</b></div>
<div id= "nav">
<%= link_to_unless_current 'Home', action: 'index' %> |
<%= link_to_unless_current 'About Us', action: 'about' %> |
<%= link_to_unless_current 'Help', action: 'help' %>
</div>
<div id="content">
<%= @content_for_layout %>
<%= yield %>
</div>
</div>
</body>
</html>
第二题:
但是,当我尝试加载不同的控制器页面时 localhost3000/users/register 它会翻转并给我错误。它一直告诉我 没有路由匹配 [GET] “/user/index”
有问题
这是我的Routes.rb
Rails.application.routes.draw do
get 'users/index'
get 'users/register'
get 'site/index'
get 'site/about'
get 'site/help'
root 'site#index'
我整天都在摸索这个问题,似乎找不到解决办法。任何帮助将不胜感激。
您的 routes
定义不正确。
例如,对于 user#index
,您必须告诉 Rails 当它与 url 中的特定路由匹配时调用哪个控制器操作:
get '/users', to: 'users#index'
这意味着,当您点击 url 时,例如 localhost:3000/users
,它将匹配此路由并调用 UsersController
的 index
操作。
或者,您可以使用 Rails 定义 resourceful routes
的约定,并具有:
resources :users
在您的 routes
文件中,然后 Rails 将为您的应用程序创建所有 CRUD 路由:
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
如果您只提供一个动作,link-helpers 将尝试 link 到当前呈现该动作的控制器中具有该名称的动作。因此,当您从不同的控制器进行渲染时,您还必须为键 controller:
.
提供一个值
我正在 Rails 上学习关于 Ruby 的教程,我准备好自杀了。
第一个问题: applications/html/erb 它一直告诉我“找不到 Rails 操作 'index'、'about' 和 'help'。但是当我在 localhost3000/site/index我可以很好地浏览页面。知道为什么它告诉我找不到操作吗?
<!DOCTYPE html>
<html>
<head>
<title><%= @title %></title>
<%= stylesheet_link_tag 'application.css' %>
</head>
<body>
<div id="whole_page">
<div id="header">Work<b>Link</b></div>
<div id= "nav">
<%= link_to_unless_current 'Home', action: 'index' %> |
<%= link_to_unless_current 'About Us', action: 'about' %> |
<%= link_to_unless_current 'Help', action: 'help' %>
</div>
<div id="content">
<%= @content_for_layout %>
<%= yield %>
</div>
</div>
</body>
</html>
第二题: 但是,当我尝试加载不同的控制器页面时 localhost3000/users/register 它会翻转并给我错误。它一直告诉我 没有路由匹配 [GET] “/user/index”
有问题这是我的Routes.rb
Rails.application.routes.draw do
get 'users/index'
get 'users/register'
get 'site/index'
get 'site/about'
get 'site/help'
root 'site#index'
我整天都在摸索这个问题,似乎找不到解决办法。任何帮助将不胜感激。
您的 routes
定义不正确。
例如,对于 user#index
,您必须告诉 Rails 当它与 url 中的特定路由匹配时调用哪个控制器操作:
get '/users', to: 'users#index'
这意味着,当您点击 url 时,例如 localhost:3000/users
,它将匹配此路由并调用 UsersController
的 index
操作。
或者,您可以使用 Rails 定义 resourceful routes
的约定,并具有:
resources :users
在您的 routes
文件中,然后 Rails 将为您的应用程序创建所有 CRUD 路由:
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
如果您只提供一个动作,link-helpers 将尝试 link 到当前呈现该动作的控制器中具有该名称的动作。因此,当您从不同的控制器进行渲染时,您还必须为键 controller:
.