0

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

好的,所以我根据反馈将我的文件修改为以下内容。仍然无法正常工作...有人可以查看下面的文件并查看我缺少哪些步骤吗?谢谢!

谢谢!我认为这就是我所做的,但我创建了“模型”,而且,作为一个新手,我不确定 Rails 是否会正常生成它......

仍然失败,您介意看看以下内容,看看您是否看到我做错了什么?

首先,这是我想在现有应用程序中连接到的第二个数据库的“旧”数据库模型(请注意,执行“文件加载”是我不会出错的唯一方法。):

class MMSDB < ActiveRecord::Base

self.abstract_class = true #important!

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

建立连接(配置[“deals_qa”])

结尾

其次,这是调用“MMSDB”模型的模型(见上文)

class Redirect < MMSDB

定义初始化

结尾

检查电子邮件地址是否存在于旧数据库中,如果存在,#increment #database table 'members' 上的重定向计数

我是否需要以某种方式告诉应用程序我想从哪个表中提取,因为旧数据库(成员)中的表 # 与当前应用程序 #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
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 回答