与活动记录交叉数据库连接

时间:2012-09-27 16:35:05

标签: ruby-on-rails ruby

我有两个网站,每个网站都连接到自己独特的数据库。我需要在网站“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与当前登录用户的活动记录混合在一起,但仅限于生产中。

好的,所以我根据反馈将我的文件修改为以下内容。仍然没有工作......有人可以查看下面的文件,看看我错过了哪些步骤?谢谢!

谢谢!我认为这就是我所做的,但我创造了'模型',并且,作为一个新手,我不确定这是否通常由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 table'members'上的重定向计数

我是否需要告诉应用程序我要从哪个表中提取,因为遗留数据库(成员)中的表#与当前应用程序中的表#database(users)

不同

def email_exists?(电子邮件)     如果find_by_email(电子邮件)        user = find_by_email(email)        user.redirect_count + = 1        user.save     结束 端

然后,这是帐户控制器文件中的代码段。

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

1 个答案:

答案 0 :(得分:2)

SubRelassing 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建立的连接一起用于主数据库。