Rails的alter_table方法有什么用?

时间:2009-12-27 23:24:58

标签: mysql ruby-on-rails migration alter-table

我一直在使用sqlite3开发我的数据库,而且我的应用程序已经足够复杂,使用起来有点慢。

我刚刚切换到MySQL并运行rake db:create ; rake db:migrate,我的一次迁移失败,并显示以下错误消息:

undefined method `alter_table` for #<ActiveRecord::ConnectionAdapters::MysqlAdapter:0xb6e6088c>

我有一个快速的谷歌,并没有任何结果。然后我检查了API,没有记录的方法alter_table。但是,它确实适用于sqlite3!

这是我的迁移:

class AddSettingsToUsers < ActiveRecord::Migration
  def self.up
    alter_table :users do |t|
      t.text signature
      ...
    end
  end

  ...

end

这与sqlite3一样正常。

我疯了吗?我是刚刚发明了这种方法吗?它恰好是一种无证件的功能,仅适用于受支持数据库的子集?

有没有人对此有所了解?

4 个答案:

答案 0 :(得分:3)

正如其他人提到的,这可能是一种仅用于sqlite的方法。 该文档提到了change_table,所以使用它,它应该以相同的方式工作:

class AddSettingsToUsers < ActiveRecord::Migration
  def self.up
    change_table :users do |t|
      t.text :signature
      ...
    end
  end

  ...

end

答案 1 :(得分:2)

对sqlite来说似乎是独一无二的

yvaine:activerecord-2.3.5 root# find . -type f -exec grep -l alter_table {} \;

./ LIB / active_record / connection_adapters / sqlite_adapter.rb

使用change_column方法可能更安全,因为它抽象了alter table方法。

答案 2 :(得分:1)

This显示Sqlite适配器中有alter_table受保护的方法。

答案 3 :(得分:0)

我有关于正则表达式操作的java适配器到sqlite的不同处理程序。 也许rails并不完全统治适配器。