rails ruby-on-rails postgresql models database-schema schema-design

ruby-on-rails - rails diagram



Uso de esquemas PostgreSQL mĂșltiples con modelos de Rails (6)

Tengo una base de datos PostgreSQL para mi aplicación Rails. En el esquema llamado ''public'' se almacenan las tablas principales de los modelos de Rails. He creado un esquema ''discogs'' que tendrá tablas con nombres que a veces son los mismos que en el esquema ''público'', que es una de las razones por las que Estoy usando esquemas para organizar esto.

¿Cómo configuraría los modelos del esquema ''discogs'' en mi aplicación? Utilizaré Sunspot para dejar que Solr indexe estos modelos también. No estoy seguro de cómo harías esto.


¿El adaptador PostgreSQL schema_search_path en database.yml resuelve tu problema?

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

O bien, puede especificar diferentes conexiones para cada esquema:

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"

Después de definir cada conexión, crea dos modelos:

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

Y, todos sus modelos heredan del esquema respectivo:

class MyModelFromPublic < PublicSchema set_table_name :my_table_name end class MyOtherModelFromDiscoGs < DiscoGsSchema set_table_name :disco end

Espero que ayude.



En migraciones:

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

Opcional en modelo

class User < ActiveRecord::Base self.table_name ''settings.users'' end


Porque set_table_name fue eliminado, y fue reemplazado por self.table_name .

Creo que debes codificarlo como sigue:

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


Solo haz

class Foo < ActiveRecord::Base set_table_name ''myschema.foo'' end


método set_table_name ha sido eliminado. self.table_name funciona bien.