【问题标题】:Missing :controller key on routes definition, please check your routes缺少:路由定义上的控制器键,请检查您的路由
【发布时间】:2017-03-16 23:34:45
【问题描述】:

我刚开始学习 Ruby on Rails,并获得了《Beginning Rails 4 第三版第 151 页》第 7 章的标记。

我生成的控制器如下; $rails 生成控制器 ControllerName [actions] [options]。 这个工作正常,但是当我尝试为用户生成控制器时

$rails 生成控制器用户。 我收到以下错误消息。 /routing/mapper.rb:328:in check_part :缺少:路由定义上的控制器键,请检查您的路由。 (参数错误)。

这就是我的路线的样子

Rails.application.routes.draw do                                    
get 'controller_name/[actions]'
get 'controller_name/[options]
root :to => "articles#index"
resources :articles
root :to => 'users#show'

结束**

我添加了最后一条路线(root :to => 'users#show')

Stackoverflow 社区很棒。我从档案中得到了很多帮助。

谢谢

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    主要问题是您的路线中需要# 而不是/

    您遇到的另一个问题是root 告诉您的应用程序在用户到达主页时将用户发送到哪里,即您的应用程序的根目录。因此,您只能为根指定一项操作。

    代替:

    Rails.application.routes.draw do                                    
      get 'controller_name/[actions]'
      get 'controller_name/[options]
      root :to => "articles#index"
      resources :articles
      root :to => "users#show"
    end
    

    这样做:

    Rails.application.routes.draw do 
      root :to => "articles#index"
      # Or
      root :to => "users#show"
    
      get 'controller_name#[actions]'
      get 'controller_name#[options]
    
      resources :articles
    end
    

    【讨论】:

      【解决方案2】:

      您的问题出在rails g controller ControllerName [actions] [options]

      这将生成路由和助手、规范文件和各种东西。问题是 [options][actions] 将成为控制器中的方法名称,它们不是有效的 ruby​​ 方法名称,并且路由 get 'controller_name/[options]' 不是有效路由。尝试删除路线:

      get 'controller_name/[actions]'
      get 'controller_name/[options]'
      

      这应该可以清除您的错误。

      一般来说,您希望您的路线具有以下形式:

      method 'path/to/route', to: 'controller#action'
      
      e.g.
      get '/my_new_api', to: 'api#my_new_api', as: :my_new_api
      # Sets a route of a GET request to '/my_new_api' referencing
      # the my_new_api method in the api controller.
      

      这就是您收到错误的原因,您的路由没有正确指定控制器。

      Here's 一个指向 Rails 路由的链接。你可以在那里看到路由的基本形式。

      但最终,要解决您的问题,您可能需要运行 rails destroy 命令:

      rails d controller ControllerName [actions] [options]
      

      或者从命令行删除错误的文件。

      如果您使用的是git,它们将很容易看到,并且看起来与git status 类似:

      Untracked files:
        (use "git add <file>..." to include in what will be committed)
      
      app/assets/javascripts/controller_name.js
      app/assets/stylesheets/controller_name.scss
      app/controllers/controller_name_controller.rb
      app/helpers/controller_name_helper.rb
      app/views/controller_name/
      spec/controllers/
      spec/helpers/
      spec/views/
      

      欢迎来到 SO! :-)

      哦,here 是指向 rails generate 命令文档的链接。

      另外,方便的是,您可以在命令行上输入rails generate,它会显示很多选项,您可以输入rails generate controller 以获得更多关于控制器的具体选项和示例。

      【讨论】:

        【解决方案3】:

        生成控制器的正确命令 与行动:

        rails generate controller ControllerName [actions] [action2] ...
        

        没有动作

        rails generate controller ControllerName
        

        并且在路由中只有一个根 url。

        【讨论】:

          猜你喜欢
          • 2017-05-01
          • 1970-01-01
          • 2014-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-23
          • 2011-11-24
          • 1970-01-01
          相关资源
          最近更新 更多