路径名无效:'users /:columnname_index' - 无法回滚,更改列名,也无法显示某些页面

时间:2013-09-19 01:19:08

标签: ruby-on-rails ruby indexing routes migration

我创建了一个迁移,将“Urlname”列添加到“用户”表。然后我为迁移添加了一个索引。这是最终的迁移:

class AddUrlnameToUsers < ActiveRecord::Migration
  def change
    add_column :users, :urlname, :string
    add_index :users, :urlname, :unique => true
  end
end

然后我使用了rake db:migrate。

schema.rb包含'urlname'列&amp;说它有一个独特的指数。但是,我网站上的某些网页有错误:无效的路线名称:'users /:urlname_index'。

好吧,我还是不想把它称为'urlname'。我想把它称为“永久链接”。但是现在我无法生成FixColumnName迁移,RemoveUrlNameFromUsers,也无法回滚 - 所有三个都有相同的“无效路由名称:'users /:urlname_index'”错误。

所以我从迁移文件中删除了add_index :users, :urlname, :unique => true,即使我已经迁移了它。这没有用。

我的routes.rb包含

Crowdpublishtv::Application.routes.draw do
  devise_for :users
  resources :users

  #resources 'users/:urlname', :to => 'User#booklist'
  #match 'users/:urlname_index', :to => 'users#show'

  devise_for :users
  authenticated :user do
    root :to => "users#booklist"
  end

  get "attachments/show"

  resources :users do
    resources :books
  end

  devise_for :users
  resources :users do
    member do
      get 'booklist', 'blog', 'profileinfo', 'readerprofileinfo', 'orgprofileinfo'
    end
  end
 end

我试过评论&amp;取消注释标有#的行。没有帮助。

以下是相关的db:migrate状态:

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20130319002105  Create users
   up     20130328235904  ********** NO FILE **********
   up     20130703205730  Add devise to users
   up     20130911002912  Add bookfiles to users
   up     20130917143106  Add urlname to users

* NO FILE * 是我认为已经回滚过的东西......但是因为很久以前'向用户添加urlname',我很漂亮确定它无关紧要。

有什么不正确的见解?我在rails 3.1.0,ruby 1.9.2,sqlite3,如果这很重要。

2 个答案:

答案 0 :(得分:1)

您在routes.rb中有很多devise_for:users。确保你只有一个,并且它的顺序很重要

确保将您的资源:用户设置在devise_for:users route。

之下

如此处https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface

所述

答案 1 :(得分:1)

您的错误显示“路线名称无效”,因此您应该查看路线,而不是数据库索引。

正如vigneshre指出的那样,你的路线中有多个devise_for。 Devise并没有生成所有这些,我的猜测是你多次运行设计生成器(如果这是他们如何到达那里)。

删除您未使用的路线,并压缩您所使用的路线。

你的问题并不完全清楚,很难说出是什么引发了你的错误。你似乎一下子就要问很多不同的问题。

  1. 如果已经运行,则更改迁移文件不会执行任何操作。迁移文件只是针对您的数据库运行的脚本,然后单独保留。 schema_migrations表记录了运行的内容。文件运行后,您可以执行脚本的“向下”版本以回滚更改,但更改文件以删除行对您的系统没有任何影响。

  2. 清理路线。路线指南可以帮助您更好地理解http://guides.rubyonrails.org/routing.html

  3. 这有帮助吗?