Convenzioni active record

Buongiorno a tutti.
Qualcuno sa dirmi come posso specificare i nomi “non standard”
(cioè quelli
non in inglese, plurale) per la generazione dei modelli?
Ho un db con una tabella “curricula” che però non viene presa come
“Curriculum”, come faccio a specificare la giusta sintassi?

Inoltre, comevengono gestite le relazioni molti a molti?
Nel db ho 3 tabelle: tab1 (id1 primaria), tab2 (id2 primaria),
tab1_tab2
(id1, id2 primarie)

Che modelli devo creare? Ne servono 3 (uno per ogni tabella) oppure
soltanto
2 con le associazioni specificate via sw?

Grazie

hai provato a dare un’occhiata qui?

http://wiki.rubyonrails.com/rails/pages/HowtoUsareSchemiLegacy

Grazie! Molto gentile.
SIlvia

Se tab1_tab2 non contiene altri campi oltre alle due chiavi primarie, ti
bastano due modelli: uno per tab1 e uno per tab2. Poi metti un
has_and_belongs_to_many nei modelli.

Ne contiene altri , per la precisione contiene un’altra chiave e un
campo.
Si deve seguire un’altra procedura?

On 5/28/07, Lucea [email protected] wrote:

Buongiorno a tutti.
Qualcuno sa dirmi come posso specificare i nomi “non standard” (cioè
quelli
non in inglese, plurale) per la generazione dei modelli?
Ho un db con una tabella “curricula” che però non viene presa come
“Curriculum”, come faccio a specificare la giusta sintassi?

Se hai dei plurali irregolari (o magari parole italiane nei nomi di
tabelle)
ti conviene “insegnare” a Rails come si declinano: vai in
config/environment.rb e in fondo scrivi:

Inflector.inflections do |inflect|
inflect.irregular ‘curriculum’, ‘curricula’
inflect.irregular ‘scatola’, ‘scatole’
end

Inoltre, comevengono gestite le relazioni molti a molti?

Nel db ho 3 tabelle: tab1 (id1 primaria), tab2 (id2 primaria), tab1_tab2
(id1, id2 primarie)

Che modelli devo creare? Ne servono 3 (uno per ogni tabella) oppure
soltanto
2 con le associazioni specificate via sw?

Se tab1_tab2 non contiene altri campi oltre alle due chiavi primarie, ti
bastano due modelli: uno per tab1 e uno per tab2. Poi metti un
has_and_belongs_to_many nei modelli.

M

grazie mille! mi siete stati davvero molto d’aiuto!

Silvia

Ne approfitto. Io utilizzo Postgresql, ma non ho ancora capito come
utilizzare uno schema che non sia il “public”, cioè quello di default.
Mi spiego meglio, vorrei creare uno schema per il test e uno per la
produzione.
Qualcuno può darmi una dritta?

On 5/28/07, Lucea [email protected] wrote:

Se tab1_tab2 non contiene altri campi oltre alle due chiavi primarie, ti
bastano due modelli: uno per tab1 e uno per tab2. Poi metti un
has_and_belongs_to_many nei modelli.

Ne contiene altri , per la precisione contiene un’altra chiave e un
campo.
Si deve seguire un’altra procedura?

Probabilmente allora ti conviene definire un modello anche per la
“relazione” intermedia. Per esempio, l’associazione fra “studenti” e
“docenti” puoi modellarla come molti-a-molti, però se vuoi anche
ricordarti
in che anno il docente X ha avuto come studente Y, devi mettere l’anno
nella
tabelal di supporto, che diventa così una entità a sé stante. Cioè passi da

studenti ------ docenti

a

studenti 1 ----- * classi * ----- 1 docenti

con che hai dato un nome alla tabella di supporto, che viene “promossa”
a
entità vera e propria. Hai splittato la relazione molti-a-molti in due
relazioni uno-a-molti. A livello di Ruby allora farai:

class Studente < ActiveRecord::Base
has_many :docenti, :through => :classi
end

class Docente < ActiveRecord::Base
has_many :studenti, :through => :classi
end

class Classe < ActiveRecord::Base
belongs_to :studente
belongs_to :docente
end

A livello di SQL ti tocca aggiungere una chiave primaria alla tabella
“classi”, perché ActiveRecord mal sopporta le chiavi primarie composte da
più di una colonna. Avrai qualcosa tipo

create table classi (
id int primary key auto_increment,
anno_accademico int,
studente_id int,
docente_id int,
unique (studente_id, docente_id)
);

La tua chiave primaria di prima viene sostituita con un vincolo di
unicità,che ha come effetto collaterale di costruire un indice sulla coppia di
colonne, che velocizzerà l’uso delle relazioni uno-a-molti.

M


È normale: nei nomi delle classi piuttosto che l’underscore_separated si
usa il CamelCase, e i generatori di rails fanno la traduzione in
automatico

Non da problemi.

J.

Avrei un’ulteriore domanda: ho una tabella con questo nome
curricula_corsi
Ho impostato il plurale con:

Inflector.inflections do |inflect|
inflect.irregular ‘curriculum_corso’, ‘curricula_corsi’
end

Quando ho generato la classe corrispondente è stato creato il file
curriculum_corso.rb, ma il nome della classe contenuta nel file è
CurriculumCorso (senza underscore).

Questo può dare problemi?
Quando vado a specificare le associazioni nelle altre classi devo usare
(ad
esempio)
has_many :curricula_corsi; belongs_to:Curriculum_Corso
oppure
has_many :curriculacorsi; belongs_to:CurriculumCorso ?

Grazie
Silvia