【问题标题】:RoR Use 2 different databases with active record adapter? same tablenamesRoR 使用 2 个不同的数据库和活动记录适配器?相同的表名
【发布时间】:2012-08-06 17:51:39
【问题描述】:

目前我正在开发一个 Rails 项目,以将 salesforce.com 的数据库与我们的 SQL 服务器连接起来。 Atm 我们使用 gem 'mysql2' 作为 sql 部分和 'databasedotcom' + 'databasedotcom-rails' 用于销售人员部分。

我们的问题是,我们在两个数据库中的表具有相同的名称。所以这两个适配器都试图将它们封装到 activerecord 类中,正如你所猜测的,这是一个大问题。不幸的是,我们在互联网上没有找到解决方案。 那么如何防止命名空间冲突呢?

【问题讨论】:

    标签: mysql ruby-on-rails database salesforce databasedotcom-gem


    【解决方案1】:

    我可能不理解这个问题,但我认为以下内容对你有用。

    class Account < ActiveRecord::Base
      # table name is 'accounts' in mysql db
    end
    
    class SalesForceAccount < ActiveRecord::Base
      establish_connection "#{Rails.env}_salesforce"
      table_name = :accounts
    end
    

    带有database.yml

    development:
      # your mysql credentials and adapter info
    development_salesforce:
      # your salesforce credentials and adapter info
    

    【讨论】:

    • 感谢您的回答!这个解决方案如何解决问题,salesforce 和 mysql 将同名的 SomeModel 设置为 activeRecord?也许我更详细地解释了这个问题:在两个数据库中都是同名的表。所以我们在两个数据库中都有帐户表。如果我们使用提到的 gem,都将表包装在类 Account
    • 我编辑了答案。这有帮助吗?您是否要执行 Account.create(...) 并在数据库中创建一个 SalesForceAccount 条目?
    • 好的,我们可能会讨论不同的目的:)。我已经与这两个数据库建立了连接,但我想为 salesforce 和 mysql 创建相互独立的帐户对象。我通过使用不同的命名空间找到了一个很好的解决方案。还是谢谢你!
    • 我的解决方案与您的解决方案相同,只是没有名称间距。要访问 mysql 帐户,请使用 Account,要获取 salesforce 帐户,请使用 SalesForceAccount。不管怎样,很高兴你明白了!
    【解决方案2】:

    为了解决命名空间冲突的问题,我们将mysql的模块放在了他自己的命名空间中。 databasedotcom gem 在运行时创建模型,因此您只需为您的 mysql 数据库创建模型。

    create modeles for sql
    create folder named after your wished prefix in models folder (for us: Mad)
    put your models in the namespacee-folder (for us: Mad)
    wrap the model classes in module <namespace>
    

    喜欢 account.rb:

    module Mad
        class Account < ActiveRecord::Base
            attr_accessible :name, :website, :phone
        end
    end
    

    现在您可以通过 Account 访问 salesforce 的帐户,并使用 Mad::Account 访问 mysql

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 2016-05-14
      • 2014-05-31
      • 1970-01-01
      相关资源
      最近更新 更多