Forum: Italian Ruby user group L'ereditarieta' in rails.

B0f6d8efcf671ea3163449e231264cc4?d=identicon&s=25 Msan Msan (msan)
on 2012-05-04 12:41
(Received via mailing list)
Class Person.
Se poi volessi avere Employee, Manager, etc. una cosa da fare sarebbe
derivare queste classi da Person.
L'ereditarieta' STI, single table inheritation, indica di mettere un
campo type sulla tabella, in questo caso people, in modo da poter
distinguere l'employee dal manager, etc.
Questo va bene se tutte le classi hanno gli stessi attributi.
Se, ad esempio, employee estende person avra' oltre agli attributi di
person anche degli altri propri.
In questo caso si rende necessario riservare una tabella per employee
ed allora tantovale creare un modello a se stante di Employee senza
necessariamente derivarlo da Person.
Qualcosa mi sfugge?
5ffafe70176a99f175d16192fd5be69e?d=identicon&s=25 Luca P. (luca_p)
on 2012-05-04 12:53
(Received via mailing list)
Io personalmente sono d'accordo, puoi cavartela se c' un campo di
differenza o due, ma per il resto la STI  per le situazioni di effettiva
identit di struttura.

2012/5/4 Mauro <mrsanna1@gmail.com>
72a90a9901ec355490d9fd1a4489136a?d=identicon&s=25 Andrea Ranaldi (mdrew)
on 2012-05-04 13:26
Non mi e` chiarissimo....
ma se mettessi due booleani? magari aggiungendo un paio di scope view.
Poi ti gestisci tramite le validazioni i campi obbligatori specifici.

es:
t.string name
t.string code
t.boolean impiegato
t.boolean manager
t.string manager_area

validates :manager_area, :presence => true, :if => :manager?

Ovviamente se le differenze sono molte e` inadatto.

Andrea
7b8c4392528b20b47726142f7a20c7cd?d=identicon&s=25 Nicholas Wieland (Guest)
on 2012-05-04 21:45
(Received via mailing list)
On May 4, 2012, at 12:41 PM, Mauro wrote:

> ed allora tantovale creare un modello a se stante di Employee senza
> necessariamente derivarlo da Person.
> Qualcosa mi sfugge?

Forse quello che vuoi e' una polimorfica piuttosto che sti, in quel caso
hai nella classe base gli attributi comuni e delle tabelle/classi
separate quando l'oggetto e' differente.

  ngw

--
[ 926381, 23200231779, 1299022, 1045307475 ].collect { |a| a.to_s( 36 )
}.join( " " )
Nicholas Wieland (ngw)
ngw@nofeed.org
http://nofeed.org
Cb8e3a1650513848561ca38f84399fa1?d=identicon&s=25 Fabrizio Regini (Guest)
on 2012-05-04 22:37
(Received via mailing list)
Ciao,
raramente mi sono trovato nei guai con l'STI, ma non nego che qualche
volta  successo.
Quindi suggerisco anche io di pensare bene al design prima.
Nel caso che citi mi pare che si tratti di utenti di un sistema (anche
solo potenziali), ed  una classica tentazione
per l'uso dell'STI, perch ti consente di avere tutti gli utenti del
sistema in una tabella sola.

> In questo caso si rende necessario riservare una tabella per employee
> ed allora tantovale creare un modello a se stante di Employee senza

Questo non lo capisco, che vuoi dire?

Nel tuo caso avrai:

class Person
end

class Employee < Person
end

class Manager < Person
end

e la colonna type sar popolata rispettivamente con:

- nil
- Empolyee
- Manager

Se gli attributi e i metodi di employe e manager divergono troppo,
spostali in modelli a parte, con o senza tabelle,
con una relazione has_one o con una banale composition e te la dovresti
cavare bene.
B0f6d8efcf671ea3163449e231264cc4?d=identicon&s=25 Msan Msan (msan)
on 2012-05-04 22:59
(Received via mailing list)
2012/5/4 Fabrizio Regini <freegenie@gmail.com>:
>
>
> e la colonna type sar popolata rispettivamente con:
>
> - nil
> - Empolyee
> - Manager
>
> Se gli attributi e i metodi di employe e manager divergono troppo, spostali in
modelli a parte, con o senza tabelle,
> con una relazione has_one o con una banale composition e te la dovresti cavare
bene.

Intendevo questo quando ho scritto che tantovale creare dei modelli a
parte.
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.