Ho due tabelle in due schemi diversi ad es. cases
e events
.Rails Postgresql schemi multipli e lo stesso nome tabella
In ogni schema devo tabella di base
events.basic
cases.basic
Questi tavoli hanno rapporti:
events.basic
ha unacases.basic
(cases.basic
ha moltievents.basic
)
I miei tentativi sono falliti:
file di cases_basic.rb
class CasesBasic < ActiveRecord::Base
set_table_name 'cases.basic'
set_primary_key 'case_id'
has_many :Events, :class_name => 'EventsBasic', :foreign_key => 'case_id'
end
file di events_basic.rb
class EventsBasic < ActiveRecord::Base
set_table_name 'events.basic'
set_primary_key 'event_id'
belongs_to :Case, :class_name => 'CasesBasic', :foreign_key => 'case_id'
end
Ambiente: Rubino 1.9.3
, Rails 3.1.3
, gem 'pg'
ho bisogno di risposta per questo le domande:
- come gestire questa situazione in Rails attivo Record?
- come interrogare queste tabelle?
- come gestire questa situazione in
rake db:schema:dump
EDIT:
Dopo aver cambiato belongs_to
e has_many
(come catcall suggeriscono) ho lo stesso errore
PGError: ERROR: column basic.case_id does not exist
LINE 1: ...IN "cases"."basic" ON "cases"."basic"."case_id" = "events"."...
^
: SELECT "events"."basic".* FROM "events"."basic" INNER JOIN "cases"."basic" ON "cases"."basic"."case_id" = "events"."basic"."case_id" LIMIT 3
Rails generano cattivo SQL. Dovrei essere fatto utilizzando alcuni alias:.
selezionare T1 * FROM "eventi" T1 "di base" INNER JOIN "casi" T2 "di base" a t1 "case_id" = t2 "case_id" LIMITE 3
....EDIT 2: Ok 'stato il mio f *** bug, non ho aggiunto colonna events.basic.case_id e chiave esterna nel mio database esempio. Funziona!
domande 1 e 2 stanno lavorando, ma ci sono domande su rake db:schema:dump
che ne dici? Rails genera modelli solo per lo schema pubblico.
Ho così tante tabelle e relazioni che voglio generarle.
Il tuo ': Events' e': Case' dovrebbe probabilmente essere ': events' e': case' ma che probabilmente non risolvere il problema. –
@muistooshort ': Events' e': Case' sembrano alias e non sono portati a SQL in questo caso –
Sono un po 'confuso riguardo a come appaiono i tavoli, come dovrebbero essere i casi "ON". "Basic" . "case_id" = "events". "basic". "case_id" 'condizioni di join come? Una delle tabelle non ha un 'case_id' e questo è un problema, come scriveresti quella condizione di join se lo facessi a mano? –