4

現在、salesforce.com のデータベースを SQL サーバーに接続する Rails プロジェクトを開発しています。Atm では、sql 部分に gem 'mysql2' を使用し、salesforce 部分に 'databasedotcom' + 'databasedotcom-rails' を使用します。

問題は、両方のデータベースのテーブルに同じ名前を付けていることです。したがって、両方のアダプターはそれらをアクティブレコードクラスにカプセル化しようとしますが、ご想像のとおり、これは大きな問題です。残念ながら、インターネットで解決策が見つかりませんでした。では、どうすれば名前空間の競合を防ぐことができますか?

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 db のモデルを作成するだけで済みます。

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 にアクセスできるようになりました。

于 2012-08-07T11:31:38.487 に答える