1

開発中のデータベースにsqlite3を使用してきましたが、アプリが複雑になり、操作が少し遅くなりました。

MySQLに切り替えて実行rake db:create ; rake db:migrateしたところ、移行の1つが失敗し、次のエラーメッセージが表示されました。

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

4 に答える 4

3

他の人が述べたように、これはおそらくsqliteにのみ使用される方法です。ドキュメントにはchange_tableが記載されているので、代わりにそれを使用してください。同じように機能するはずです。

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

  ...

end
于 2009-12-27T23:52:01.240 に答える
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メソッドを使用する方がおそらく安全です。これは、altertableメソッドを抽象化するためです。

于 2009-12-27T23:44:56.400 に答える
1

これalter_tableは、Sqliteアダプターに保護されたメソッドがあることを示しています。

于 2009-12-27T23:35:07.760 に答える
0

正規表現の操作に関して、Java アダプターから sqlite へのさまざまなハンドラーがありました。たぶん、レールはアダプターを完全に支配していません。

于 2011-11-13T23:20:59.347 に答える