4

目前我正在开发一个 Rails 项目,将 salesforce.com 的数据库与我们的 SQL 服务器连接起来。Atm 我们对 sql 部分使用 gems 'mysql2',对 salesforce 部分使用 'databasedotcom' + 'databasedotcom-rails'。

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

4

2 回答 2

2

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

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
于 2012-08-06T18:32:08.997 回答
0

为了解决命名空间冲突的问题,我们将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 和 Mad::Account 的 mysql 访问 salesforce 的帐户

于 2012-08-07T11:31:38.487 回答