0

それぞれ独自のデータベースに接続する 2 つの Web サイトがあります。メールアドレスがウェブサイト「B」データベースに存在することをウェブサイト「A」で検証する必要があります。次のように検証を行っています。

AccountController < ApplicationControllerWeb サイト「A のクラス」から呼び出されます:

config = YAML::load(File.open("#{RAILS_ROOT}/config/database.yml"))
      ActiveRecord::Base.establish_connection(config["database B"])
      if ActiveRecord::Base.connection.select_values("SELECT "database B".X
          FROM 'database B".X WHERE 'database B'.X.email = @member_email")

この呼び出しは、開発および QA 環境でテストすると機能しますが、実稼働環境では失敗します。本番環境で発生しているように見えるのは、ActiveRecord の値とselectget が、現在ログインしているユーザーのアクティブなレコードと混在していることですが、本番環境でのみ発生します。

わかりましたので、フィードバックに基づいて、ファイルを次のように変更しました。まだ動作していません... 誰かが以下のファイルを確認して、私が見逃している手順を確認してもらえますか? ありがとう!

ありがとう!それが私がしたことだと思いますが、「モデル」を作成しました。初心者なので、それが通常Railsによって生成されるかどうかはわかりません...

まだ失敗しています。以下を見て、私が間違っていることがわかるかどうかを確認していただけますか?

まず、これは既存のアプリケーションで接続したい 2 番目のデータベースの「レガシー」データベース モデルです (「Fileload」を実行することが、これをエラーにならないようにする唯一の方法であることに注意してください)。

class MMSDB < ActiveRecord::Base

self.abstract_class = true #重要!

config = YAML::load(File.open("#{RAILS_ROOT}/config/database.yml"))

確立_接続(config["deals_qa"])

終わり

次に、これは「MMSDB」モデルを呼び出すモデルです (上記を参照)。

class Redirect < MMSDB

デフ初期化

終わり

電子メール アドレスがレガシー データベースに存在するかどうかを確認し、存在する場合は、データベース テーブル「members」のリダイレクト カウントを #インクリメントします。

# 従来のデータベース (メンバー) のテーブルは現在のアプリケーション #データベース (ユーザー) のテーブルとは異なるため、プルするテーブルをアプリケーションに伝える必要がありますか?

def email_exists?(email) if find_by_email(email) user = find_by_email(email) user.redirect_count += 1 user.save end end

終わり

次に、これはアカウント コントローラー ファイル内のコード スニペットです。

        else
        if user == Redirect::User.email_exists?(@email)
            @Redirect_Flag = true
        else
            flash.now[:error] = 'Invalid email or password; please try again.'
        end
     end
4

1 に答える 1

2

ActiveRecord::Base をサブクラス化すると、異なるデータベースへの複数の接続を確立できます。

module DatabaseB
  class Base < ActiveRecord::Base
    @abstract_class = true
    establish_connection(config["database B"])
  end
end

class YourAwesomeModel < DatabaseB::Base
  set_table_name "X"
  # Use your regular active record magic
end

ActiveRecord::Base を使用してプライマリ データベースに確立された接続で、他のモデルを引き続き使用できます。

于 2012-09-27T18:35:49.827 に答える