4

Rails 3.1.0 アプリでは、ユーザー資格情報に基づいて複数のデータベースにアクセスしたいと考えています。複数の解決策があります。1 つは、ユーザーごとに 1 つのアプリをインストールし、すべてのアプリが 1 つのデータベースにのみアクセスすることです。問題は、多くのデータベース (数百など) がある場合、アプリのインストール数が同じになることです。多数のアプリのメンテナンスは面倒かもしれません。もう 1 つの方法は、アプリ内の複数のデータベースにアクセスすることです。ただし、このアプローチは Rails 3.1.0 ではサポートされていないようです。確かに、ログインしたばかりのユーザーがどのデータベースにアクセスするかを決定するコードがアプリ内にあるでしょう。アプローチの長所と短所について誰かが解決策と洞察を提供できますか? 本当にありがとう。

4

2 に答える 2

5

ActiveRecord::Base.establish_connection特定のコンテキスト内で好きなデータベースに動的に接続するために使用できるはずです。これをどのように実装するかは完全にアプリケーション固有ですが、Rails にはこの機能があります。

非常に不自然な例を次に示します。

class User
  def books
    ActiveRecord::Base.establish_connection(
      :adapter  => "mysql",
      :host     => "localhost",
      :username => self.username,
      :password => self.password,
      :database => self.database
    )

    Book.all
  rescue Exception => e
    # ...
  end
end

実際のエラー処理を行い、おそらくインスタンス メソッドの外部のどこかに接続を確立する必要がありますが、それはあなた次第です。

于 2012-04-04T14:18:02.027 に答える
3

アパートの宝石はまさにあなたが探しているものかもしれません:

Apartment は、Rails アプリケーションで複数のデータベースを処理するのに役立つツールを提供します。アカウントまたは会社に基づいて特定のデータを隔離する必要があるが、一部のデータを共通のデータベースに存在させる必要がある場合は、Apartment が役立ちます。

于 2012-04-23T18:47:00.773 に答える