0

問題: 最初に選択したサーバーに応じて、複数のデータベースに接続する必要があります。ユーザークラスの関連付けを持つクライアントテーブルがある場合、データベースの1つに接続してクライアントにクエリを実行できますが、@clients.userclassesそうすると、元のテーブルに戻っているため、テーブルユーザークラスが存在しないというエラーが表示されますデータベース。

以下のコード:

class Connection < ActiveRecord::Base
  self.abstract_class = true
end

class Client < Connection
  has_many :userclasses, :dependent => :destroy
end

class Userclass < Connection
  belongs_to :client
  self.table_name = "userclasses"
end

class ClientsController < ApplicationController
  before_filter :set_server
  def show
    @client = Client.find(params[:id])
    respond_to do |format|
      format.html{ render html: @client}
      format.xml { render xml: @client }
    end
  end
  private

  def set_server
    @server = Server.find(params[:server_id])
    unless @server.nil? or @server.database.nil?
      Client.establish_connection(ActiveRecord::Base.configurations["#{@server.database}"])
    end
  end

end
4

1 に答える 1

1

使用していたモデルだけを切り替えようとするのではなく、ActiveRecord 接続全体を必要なものに切り替えるだけになりました。

def set_server
    @server = Server.find(params[:server_id])
    unless @server.nil? or @server.database.nil?
      ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations["#{@server.database}"])
    end
  end
于 2013-01-24T13:50:03.463 に答える