2012-01-11 80 views
1

我想安装血统宝石,但我有问题rake db:migrate祖先分贝:迁移

我按照Ancestry github页面上的说明进行操作。我已经做了rails g migration add_ancestry_to_message ancestry:string 我编辑迁移文件后(以下railcast#262)为:

class AddAncestryToMessage < ActiveRecord::Migration 
    def self.up 
    add_column :messages, :ancestry, :string 
    add_index :messages, :ancestry 
    end 

    def self.down 
    remove_index :messages, :ancestry 
    remove_column :messages, :ancestry 
    end 
end 

当我再运行rake db:migrate我收到以下错误:

== AddAncestryToMessage: migrating =========================================== 
-- add_column(:messages, :ancestry, :string) 
rake aborted! 
An error has occurred, this and all later migrations canceled: 

SQLite3::SQLException: no such table: Shipmgr: ALTER TABLE "Message" ADD "ancestry" varchar(255) 

Tasks: TOP => db:migrate 

我曾尝试这在一个新创建的rails应用程序和一个现有的rails应用程序上,但我仍然无法得到这个工作。有没有人在这个问题上有任何建议?

回答

0

你应该尝试改变迁移类名称的使用复数(表)形式的“消息”:

class AddAncestryToMessages < ActiveRecord::Migration 

,或者更准确的说,更改迁移发生器命令:

rails g migration add_ancestry_to_messages ancestry:string 
+0

感谢你的建议。我试过这个,它仍然抛出相同的错误信息。我已经按照你所描述的方式进行了设置,我在包含'class Messages 2012-01-12 10:40:23

+0

的模型中也有messages.rb我认为问题可能是你如何使用复数和单数你的代码中的名字。以下是一般规则:模型类名称和模型文件名应使用单数(类Message和message.rb)。迁移应参考总是复数的表名。有许多方法可以改变这种默认行为,但首先尝试遵守默认设置,看看是否可行 – PinnyM 2012-01-12 14:45:54

+0

另外,您是否可以确认您是否有以前的迁移来创建:messages表? – PinnyM 2012-01-12 17:05:24