【问题标题】:Does not find the right Route(routes)找不到正确的路线(路线)
【发布时间】:2016-04-04 20:17:22
【问题描述】:

您好,当我尝试执行 bundle exec rake db:migrate 时遇到问题 我从来没有遇到过这个问题,这是代码

bundle exec rake db:migraterake aborted!
ArgumentError: Missing :controller key on routes definition, please check your routes.
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/mapper.rb:275:in `check_part'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/mapper.rb:255:in `check_controller_and_action'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/mapper.rb:178:in `normalize_options!'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/mapper.rb:100:in `initialize'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/mapper.rb:78:in `new'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/mapper.rb:78:in `build'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/mapper.rb:1559:in `add_route'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/mapper.rb:1536:in `decomposed_match'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/mapper.rb:1517:in `block in match'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/mapper.rb:1507:in `each'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/mapper.rb:1507:in `match'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/mapper.rb:689:in `map_method'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/mapper.rb:650:in `get'
/home/ubuntu/workspace/sample_app/config/routes.rb:3:in `block in <top (required)>'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/route_set.rb:432:in `instance_exec'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/route_set.rb:432:in `eval_block'
/usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.2/lib/action_dispatch/routing/route_set.rb:410:in `draw'
/home/ubuntu/workspace/sample_app/config/routes.rb:1:in `<top (required)>'
/usr/local/rvm/gems/ruby-2.2.1/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:268:in `load'
/usr/local/rvm/gems/ruby-2.2.1/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:268:in `block in load'
/usr/local/rvm/gems/ruby-2.2.1/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:240:in `load_dependency'
/usr/local/rvm/gems/ruby-2.2.1/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:268:in `load'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/application/routes_reloader.rb:40:in `block in load_paths'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/application/routes_reloader.rb:40:in `each'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/application/routes_reloader.rb:40:in `load_paths'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/application/routes_reloader.rb:16:in `reload!'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/application/routes_reloader.rb:26:in `block in updater'
/usr/local/rvm/gems/ruby-2.2.1/gems/activesupport-4.2.2/lib/active_support/file_update_checker.rb:75:in `call'
/usr/local/rvm/gems/ruby-2.2.1/gems/activesupport-4.2.2/lib/active_support/file_update_checker.rb:75:in `execute'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/application/routes_reloader.rb:27:in `updater'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/application/routes_reloader.rb:7:in `execute_if_updated'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/application/finisher.rb:69:in `block in <module:Finisher>'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/initializable.rb:30:in `instance_exec'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/initializable.rb:30:in `run'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/initializable.rb:55:in `block in run_initializers'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/initializable.rb:54:in `run_initializers'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/application.rb:352:in `initialize!'
/home/ubuntu/workspace/sample_app/config/environment.rb:5:in `<top (required)>'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/application.rb:328:in `require'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/application.rb:328:in `require_environment!'
/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/application.rb:457:in `block in run_tasks_blocks'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)

这是我做的第一部分rails generate controller AccountActivations \ edit --no-test-framework

然后routes.rb

Rails.application.routes.draw do

  get 'account_activations/ edit'

  get 'account_activation/ edit'

  get 'sessions/new'

  root                 'static_pages#home'
  get 'help'        => 'static_pages#help'
  get 'about'       => 'static_pages#about'
  get 'contact'     => 'static_pages#contact'
  get 'signup'      => 'users#new'
  get 'login'       => 'sessions#new'
  post 'login'      => 'sessions#create'
  delete 'logout'   => 'sessions#destroy'
  resources :users
  resources :account_activations, only: [:edit] 
end

然后我运行这段代码:

$ rails generate migration add_activation_to_users \
> activation_digest:string activated:boolean activated_at:datetime

我修改了这个新文件

class AddActivationToUsers < ActiveRecord::Migration
  def change
    add_column :users, :activation_digest, :string
    add_column :users, :activated, :boolean, default: false
    add_column :users, :activated_at, :datetime
end end

最后是bundle exec rake db:migrate 然后我收到错误消息,有人看到任何问题吗?提前致谢! 顺便说一下,这是第 10 章 ruby​​ on rails 教程。

【问题讨论】:

    标签: ruby-on-rails ruby routes config dbmigrate


    【解决方案1】:

    我想你可能正在使用

    resources :account_activations
    

    错误...资源应该在模型上使用,在这种情况下它是一个控制器 -> 这就是您的日志所抱怨的。 这是您的一些参考:http://guides.rubyonrails.org/routing.html#resources-on-the-web

    资源路由允许您快速声明给定资源控制器的所有公共路由。资源丰富的路由不是为您的索引、显示、新建、编辑、创建、更新和销毁操作声明单独的路由,而是在一行代码中声明它们。

    也许运行一个

    rake routes
    

    查看您有哪些可用路由,以及“resources :account_activations”是否正在编辑路由。

    【讨论】:

    • 它比这更简单(但谢谢伙计:)我离开了'account_activations/edit'和像这样的'account_activations/edit'这样的空间,根本没有任何工作。显然迁移将无法正常运行。谢谢:)
    【解决方案2】:

    可能只是删除这两行就可以解决它:

    get 'account_activations/ edit'
    
    get 'account_activation/ edit'
    

    您已在此处和资源中定义了此路线两次。

    【讨论】:

      【解决方案3】:

      您的routes.rb 错误。

      Rails.application.routes.draw do
      
        get 'account_activations/edit'
      
        get 'account_activation/edit'
      
        get 'sessions/new'
      
        root :to => 'static_pages#home'
      
        get 'help'        => 'static_pages#help'
        get 'about'       => 'static_pages#about'
        get 'contact'     => 'static_pages#contact'
        get 'signup'      => 'users#new'
        get 'login'       => 'sessions#new'
        post 'login'      => 'sessions#create'
        delete 'logout'   => 'sessions#destroy'
        resources :users
        resources :account_activations, only: [:edit] 
      
      end
      

      【讨论】:

        【解决方案4】:

        helpabout 路由缺少它的控制器(可选操作)参数。

        root 路由也缺少它的选项。

        【讨论】:

        • 对不起,这是路线
        • 为什么get 'account_activations/ edit'行斜线后面有空格?
        • 只是在下一行输入'/'并按回车继续向下
        • 应该是get 'account_activations/edit' 而不是get 'account_activations/ edit'。删除/edit 之前的空格。
        • 伙计,是的!就是这样!我想我按下空间播放视频,我移动了它!非常感谢。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-29
        • 2014-04-22
        • 1970-01-01
        • 2018-03-03
        • 1970-01-01
        • 2014-04-20
        相关资源
        最近更新 更多