找不到路由错误和操作

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,它将匹配此路由并调用 UsersControllerindex 操作。

或者,您可以使用 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

我强烈建议您阅读 Rails official documentation for Routes

如果您只提供一个动作,link-helpers 将尝试 link 到当前呈现该动作的控制器中具有该名称的动作。因此,当您从不同的控制器进行渲染时,您还必须为键 controller:.

提供一个值