Использование нескольких схем PostgreSQL с моделями Rails
У меня есть база данных PostgreSQL для моего приложения Rails. В схеме с именем "public" хранятся таблицы моделей основных рельсов и т. д. Я создал схему "discogs", которая будет иметь таблицы с именами, которые иногда совпадают с именами в схеме "public", что является одной из причин, по которой я использую схемы для организации этого.
Как мне настроить модели из схемы "discogs" в моем приложении? Я буду использовать Солнце, чтобы позволить индексу Гумз этих моделей, а также. Я не уверен, как вы сделал бы это.
6 ответов:
адаптер PostgreSQL schema_search_path в базе данных.yml действительно решает вашу проблему?
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"
после каждого определенного соединения создайте две модели:
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 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