我一直在使用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一样正常。
我疯了吗?我是刚刚发明了这种方法吗?它恰好是一种无证件的功能,仅适用于受支持数据库的子集?
有没有人对此有所了解?
答案 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并不完全统治适配器。