簡體   English   中英

與活動記錄交叉數據庫連接

[英]Cross Database Connection with Active Record

我有兩個網站,每個網站都連接到自己獨特的數據庫。 我需要在網站“A”中驗證網站“B”數據庫中是否存在電子郵件地址。 我正在進行如下驗證:

從網站'A的AccountController < ApplicationController類調用:

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的值以及select get與當前登錄用戶的活動記錄混合,但僅限於生產中。

好的,所以我根據反饋將我的文件修改為以下內容。 仍然沒有工作......有人可以查看下面的文件,看看我錯過了哪些步驟? 謝謝!

謝謝! 我認為這就是我所做的,但我創造了'模型',並且,作為一個新手,我不確定這通常是由Rails生成的......

仍然失敗,你介意看看下面的內容,看看你是否看到我做錯了什么?

首先,這是我想要在現有應用程序中連接的第二個數據庫的“遺留”數據庫模型(請注意,執行'Fileload'是我唯一可以解決此問題的方法。):

class MMSDB < ActiveRecord::Base

self.abstract_class = true #important!

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

establish_connection(CONFIG [ “deals_qa”])

結束

其次,這是調用'MMSDB'模型的模型(見上文)

class Redirect < MMSDB

def初始化

結束

檢查舊數據庫中是否存在電子郵件地址,如果存在,則#increment #database表'成員'上的重定向計數

我是否需要告訴應用程序我要從哪個表中提取,因為遺留數據庫(成員)中的表#將與當前應用程序中的#database(用戶)不同

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

子類化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建立的連接一起用於主數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM