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.
El correcto para los rieles 4.2 es como:
class Foo < ActiveRecord::Base
self.table_name = ''myschema.foo''
end
Más información - http://api.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-table_name-3D
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.