75

Rails アプリケーション用の PostgreSQL データベースがあります。「public」という名前のスキーマには、主要なRailsモデルのテーブルなどが格納されています。「discogs」スキーマを作成しました。これには、「public」スキーマと同じ名前のテーブルが含まれることがあります。これが理由の1つです。これを整理するためにスキーマを使用しています。

アプリで「discogs」スキーマからモデルをセットアップするにはどうすればよいですか? Sunspot を使用して、Solr がこれらのモデルにもインデックスを作成できるようにします。あなたがこれをどのように行うかわかりません。

4

6 に答える 6

114

database.ymlのPostgreSQLアダプターschema_search_pathは問題を解決しますか?

development:
  adapter: postgresql
  encoding: utf-8
  database: solidus
  host: 127.0.0.1
  port: 5432
  username: postgres
  password: postgres
  schema_search_path: "discogs,public"

または、スキーマごとに異なる接続を指定できます。

public_schema:
  adapter: postgresql
  encoding: utf-8
  database: solidus
  host: 127.0.0.1
  port: 5432
  username: postgres
  password: postgres
  schema_search_path: "public"

discogs_schema:
  adapter: postgresql
  encoding: utf-8
  database: solidus
  host: 127.0.0.1
  port: 5432
  username: postgres
  password: postgres
  schema_search_path: "discogs"

各接続を定義したら、次の2つのモデルを作成します。

class PublicSchema < ActiveRecord::Base
  self.abstract_class = true
  establish_connection :public_schema
end

class DiscoGsSchema < ActiveRecord::Base
  self.abstract_class = true
  establish_connection :discogs_schema
end

そして、すべてのモデルはそれぞれのスキーマから継承します。

class MyModelFromPublic < PublicSchema
  set_table_name :my_table_name
end

class MyOtherModelFromDiscoGs < DiscoGsSchema
  set_table_name :disco
end

お役に立てば幸いです。

于 2012-01-12T16:50:35.437 に答える
18

Rails 4.2の正しいものは次のとおりです。

class Foo < ActiveRecord::Base
  self.table_name = 'myschema.foo'
end

詳細 - http://api.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-table_name-3D

于 2016-03-11T16:53:01.097 に答える
11

ただやる

class Foo < ActiveRecord::Base
  self.table_name = 'myschema.foo'
end
于 2012-01-15T15:09:43.210 に答える
4

メソッドset_table_nameが削除されました。self.table_name正常に動作します。

于 2015-08-05T10:07:52.053 に答える