0

我创建了一个迁移以将 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”列并表示它具有唯一索引。但是,我网站上的某些页面有错误:无效的路由名称:'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

我尝试注释掉并取消注释用# 标记的行。没有帮助。

这是相关的 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,如果这很重要的话。

4

2 回答 2

1

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

确保将资源 :users 放在 devise_for :users 路由下方。

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

于 2013-09-19T01:52:27.340 回答
1

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

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

删除您不使用的路线并压缩您使用的路线。

您的问题并不完全清楚,很难说出是什么触发了您的错误。您似乎同时询问了许多不同的问题。

  1. 如果迁移文件已经运行,则更改迁移文件无济于事。迁移文件只是针对您的数据库运行然后单独放置的脚本。您的 schema_migrations 表记录了运行的内容。文件运行后,您可以执行脚本的“向下”版本来回滚更改,但更改文件以删除一行对您的系统没有影响。

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

这有帮助吗?

于 2013-09-19T16:11:16.407 回答