【问题标题】:Ancestry db:migrate祖先数据库:迁移
【发布时间】:2012-02-08 08:04:08
【问题描述】:

我正在尝试安装 Ancestry gem,但遇到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 应用程序上尝试过这个,但我仍然无法让它工作。有人对这个问题有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rubygems gem dbmigrate


    【解决方案1】:

    您应该尝试将迁移类名称更改为复数(表格)形式“消息”:

    class AddAncestryToMessages < ActiveRecord::Migration
    

    或者,更准确地说,将迁移生成器命令更改为:

    rails g migration add_ancestry_to_messages ancestry:string
    

    【讨论】:

    • 感谢您的建议。我已经尝试过了,它仍然抛出相同的错误消息。我已经按照您描述的方式进行了设置,在包含 class Messages &lt; ActiveRecord::Base has_ancestry end 的模型中也有 messages.rb
    • 我认为问题可能在于您如何在整个代码中使用复数和单数名称。以下是一般规则: 模型类名和模型文件名应使用单数(Message 类和 message.rb)。迁移应引用始终为复数的表名。有一些方法可以改变这种默认行为,但首先尝试符合默认值,看看是否可行
    • 另外,您能否确认您之前进行了迁移以创建 :messages 表?
    • 关于使用复数和单数名称,我尝试了几种不同的变体。我已经尝试完全使用新生成的 Rails 应用程序来跟踪ancestry railscast。在关注 railscast 之前,除了捆绑安装和 rake db:migrate 之外,我什么也没做。
    • 感谢您的耐心等待,我没有正确创建 :messages 表。再次感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2012-03-04
    • 2015-01-02
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 2016-11-24
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多