Ruby on rails 为什么我在尝试运行rake db:migrate时总是遇到这个错误? ==添加消息:正在迁移========================================== -添加列:消息,:祖先,:字符串 雷克流产了! 发生错误,此迁移和所有后续迁移已取消: SQLite3::SQLException:没有这样的表:消息:更改表消息添加祖先varchar255

Ruby on rails 为什么我在尝试运行rake db:migrate时总是遇到这个错误? ==添加消息:正在迁移========================================== -添加列:消息,:祖先,:字符串 雷克流产了! 发生错误,此迁移和所有后续迁移已取消: SQLite3::SQLException:没有这样的表:消息:更改表消息添加祖先varchar255,ruby-on-rails,migration,dbmigrate,ancestry,Ruby On Rails,Migration,Dbmigrate,Ancestry,因此,我的应用程序中有一些消息,你可以像推特和即时消息一样发布,添加回复,我正在使用祖先宝石来实现这一点 我的schema.rb文件中的代码我想这就是它每次运行rake db:migrate时用来创建表的文件。但我可能错了,这可能是问题所在 create_table "messages", :force => true do |t| t.string "content" t.integer "user_id" t.datetime "created_at"

因此,我的应用程序中有一些消息,你可以像推特和即时消息一样发布,添加回复,我正在使用祖先宝石来实现这一点

我的schema.rb文件中的代码我想这就是它每次运行rake db:migrate时用来创建表的文件。但我可能错了,这可能是问题所在

  create_table "messages", :force => true do |t|
    t.string   "content"
    t.integer  "user_id"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
    t.string   "ancestry"
  end

  add_index "messages", ["user_id", "created_at", "ancestry"], :name =>   "index_messages_on_user_id_and_created_at_and_ancestry"

哦,现在我明白了:您将代码添加到schema.rb中,但必须使用迁移。从schema.rb中删除手动添加的代码并运行:

您将获得文件db/migrate/[timestamp]\u create\u messages.rb。用您的代码填充它的change方法,然后运行应该为您创建的方法,但为空。对于旧版本,它被命名为up:


此命令将自行更改schema.rb。不要手动更改它!至少在你成为一名成熟的Rails程序员之前。

嗯,这对我来说不起作用。我从add_索引方法中取出了t.string祖先和祖先,因此将其更改回原始状态。然后我运行rails g migration CreateMessages,它为我创建了rb文件。然后我复制并粘贴了上面所有的代码。这些都对吗?等一下。把它改回原来的状态-你是什么意思?您已经有了表,只想向其中添加索引?如果您只需要向已有的表中添加索引,那么up/change方法应该只包含add_index。。。。。另外,如果您有up方法,那么使用remove_索引填充down方法:name=>..@user1123905,几乎正确。在新rb文件的up中,您应该调用add_column和add_index,因为正如jdoe所指出的,您已经拥有了该表。
rails g migration CreateMessages
rake db:migrate