【问题标题】:Rails 4 rake db:migrate causes invalid route error after Devise installRails 4 rake db:migrate 在设计安装后导致无效路由错误
【发布时间】:2016-07-07 21:58:13
【问题描述】:

我在学习使用 Rails 4 进行身份验证一书中的身份验证教程时遇到了问题。

我将gem "devise", "~> 3.4.1" 添加到我的Gemfile,运行bundle,并运行生成器rails g devise:install

然后我生成了用户,就像它写在书中一样:rails g devise user

直到这部分一切都很好。然后我跑了bundle exec rake db:migrate,得到了这个错误:

$ bundle exec rake db:migrate
rake aborted!
ArgumentError: Invalid route name, already in use: 'new_user_session' 
You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here: 
http://guides.rubyonrails.org/routing.html#restricting-the-routes-created
/var/lib/gems/2.3.0/gems/devise-3.4.1/lib/devise/rails/routes.rb:360:in `block in devise_session'
/var/lib/gems/2.3.0/gems/devise-3.4.1/lib/devise/rails/routes.rb:359:in `devise_session'
/var/lib/gems/2.3.0/gems/devise-3.4.1/lib/devise/rails/routes.rb:249:in `block (4 levels) in devise_for'
/var/lib/gems/2.3.0/gems/devise-3.4.1/lib/devise/rails/routes.rb:249:in `each'
/var/lib/gems/2.3.0/gems/devise-3.4.1/lib/devise/rails/routes.rb:249:in `block (3 levels) in devise_for'
/var/lib/gems/2.3.0/gems/devise-3.4.1/lib/devise/rails/routes.rb:452:in `with_devise_exclusive_scope'
/var/lib/gems/2.3.0/gems/devise-3.4.1/lib/devise/rails/routes.rb:248:in `block (2 levels) in devise_for'
/var/lib/gems/2.3.0/gems/devise-3.4.1/lib/devise/rails/routes.rb:351:in `block in devise_scope'
/var/lib/gems/2.3.0/gems/devise-3.4.1/lib/devise/rails/routes.rb:350:in `devise_scope'
/var/lib/gems/2.3.0/gems/devise-3.4.1/lib/devise/rails/routes.rb:247:in `block in devise_for'
/var/lib/gems/2.3.0/gems/devise-3.4.1/lib/devise/rails/routes.rb:223:in `each'
/var/lib/gems/2.3.0/gems/devise-3.4.1/lib/devise/rails/routes.rb:223:in `devise_for'
/home/rafal/ruby_workspace/ticketee/config/routes.rb:4:in `block (2 levels) in <top (required)>'
/home/rafal/ruby_workspace/ticketee/config/routes.rb:3:in `block in <top (required)>'
/home/rafal/ruby_workspace/ticketee/config/routes.rb:1:in `<top (required)>'
/home/rafal/ruby_workspace/ticketee/config/environment.rb:5:in `<top (required)>'/var/lib/gems/2.3.0/gems/rake-11.2.2/exe/rake:27:in `<top (required)>'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)

这是我的routes.rb

Rails.application.routes.draw do
  devise_for :users
  Rails.application.routes.draw do
  devise_for :users
    root "projects#index"

    resources :projects do
      resources :tickets
    end
  end
end

【问题讨论】:

  • 请发config/routes.rb的内容。
  • 我把它作为答案发布了
  • Okomikeruko 下面的解决方案看起来是合法的。如果它有效,您应该考虑接受它作为答案:meta.stackexchange.com/a/5235/249307。另外,请不要发布数据作为答案——1) 编辑您的问题以包含它;或 2) 将其发布到其他位置,例如 gist.github.com,并使用 edit 将链接包含在您的问题中。
  • @Okomikeruko 看起来不错 - 看起来应该可以工作,请确认 OP

标签: ruby-on-rails ruby devise rake


【解决方案1】:

看起来你遇到了嵌套错误的情况

应该是这样的:

Rails.application.routes.draw do
  root "projects#index"
  devise_for :users
  resources :projects do
    resources :tickets
  end
end

【讨论】:

    猜你喜欢
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    相关资源
    最近更新 更多