0

Rails 3.0アプリには、コンセプトとカテゴリの2つのモデルがあります。コンセプトには、カテゴリにマップするcategory_idフィールドがあります。さまざまな理由から、これらのモデルは2つの異なるデータベースに保存する必要があります。どちらも、メインのアプリデータベースとは異なります。

class Concept < ActiveRecord::Base
  establish_connection configurations[Rails.env]["db1"]
  set_table_name "concepts"
end

class Category < ActiveRecord::Base
  establish_connection configurations[Rails.env]["db2"]
  set_table_name "categories"
end

コンセプトのカテゴリを取得するために、コンセプトモデルに次のようなメソッドがあります。

app / models / icon.rb内:

  def category
    Category.find_by_id(category_id)
  end

Railsコンソールでは、これは問題なく機能します。ただし、コンセプトショーページで@ concept.categoryを実行しようとすると、次のエラーが発生します。

Table 'myapp_development.categories' doesn't exist

これを引き起こしているものは何ですか?

4

1 に答える 1

1

興味深い問題です。これを試したことはありません。

set_table_nameあなたのように、モデル名がテーブル名の単数形である場合は必要ありません。

データベース接続を database.yml に設定する場合は、通常どおり、以下に示すように接続名を渡します。

関連を追加するのを忘れていたため、例外が発生しています。

ちょうどそれをテストしました:

# config/database.yml
db1:
  adapter: mysql2
  database: db1
  username: username
  password: password

db2:
  adapter: mysql2
  database: db2
  username: some_other_username
  password: some_other_password

# models/concept.rb
class Concept < ActiveRecord::Base
  establish_connection :db1
  belongs_to :category
end

# models/category.rb
class Category < ActiveRecord::Base
  establish_connection :db2
  has_one :concept
end

単一のデータベースであるかのように動作します。

于 2012-08-28T00:04:21.163 に答える