Railsアプリケーション用のPostgreSQLデータベースがあります。 「public」という名前のスキーマには、メインのRailsモデルテーブルが格納されます。「discogs」スキーマを作成しました。これを整理するためにスキーマを使用している理由の1つです。
アプリの「discogs」スキーマからモデルをセットアップするにはどうすればよいですか? Sunspotを使用して、Solrにこれらのモデルのインデックスを作成させます。どのようにこれを行うかはわかりません。
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
役に立てば幸いです。
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
ただやる
class Foo < ActiveRecord::Base
set_table_name 'myschema.foo'
end
移行の場合:
class CreateUsers < ActiveRecord::Migration
def up
execute 'CREATE SCHEMA settings'
create_table 'settings.users' do |t|
t.string :username
t.string :email
t.string :password
t.timestamps null: false
end
end
def down
drop_table 'settings.users'
execute 'DROP SCHEMA settings'
end
end
モデルでオプション
class User < ActiveRecord::Base
self.table_name 'settings.users'
end
set_table_name
が削除され、self.table_name
に置き換えられたためです。
次のようにコードに従う必要があると思います:
class Foo < ActiveRecord::Base
self.table_name = 'myschema.foo'
end
方法 set_table_name
は削除されました。 self.table_name
正常に動作します。