【问题标题】:Cross Database Connection with Active Record与 Active Record 的跨数据库连接
【发布时间】:2012-09-27 16:35:04
【问题描述】:

我有两个网站,每个网站都连接到自己独特的数据库。我需要在网站“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 是否会正常生成它......

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

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

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?(电子邮件) 如果 find_by_email(email) 用户 = find_by_email(电子邮件) user.redirect_count += 1 用户保存 结尾 结束

结束

那么这是帐户控制器文件中的代码sn-p。

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

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    子类化 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 与您的主数据库建立连接来使用您的其他模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多