我创建了一个迁移,将“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,如果这很重要。
答案 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并没有生成所有这些,我的猜测是你多次运行设计生成器(如果这是他们如何到达那里)。
删除您未使用的路线,并压缩您所使用的路线。
你的问题并不完全清楚,很难说出是什么引发了你的错误。你似乎一下子就要问很多不同的问题。
如果已经运行,则更改迁移文件不会执行任何操作。迁移文件只是针对您的数据库运行的脚本,然后单独保留。 schema_migrations表记录了运行的内容。文件运行后,您可以执行脚本的“向下”版本以回滚更改,但更改文件以删除行对您的系统没有任何影响。
清理路线。路线指南可以帮助您更好地理解http://guides.rubyonrails.org/routing.html
这有帮助吗?