2010-07-09 12 views
7

Desidero avere un modello Status che sarà relativamente statico dopo alcune impostazioni definite dall'utente (e diversi utenti potrebbero avere valori diversi sullo stato).Devo usare has_one o belongs_to in ruby ​​on rails?

Lo stato può essere applicato a diversi modelli, ad esempio Contact e Event.

così gli stati restituiti da contact.status saranno diverse da event.status

voglio progettare l'applicazione in modo che tabella di stato ha diversi tipi (contacts e events).

Qual è la strategia e il formato giusto per questo?

sto pensando di dichiarare :has_one Status nel modello Contact, e memorizzare un :status_id nella tabella :contacts. Idem con Event.

:statuses la tabella avrà il valore di stato, tipo e data.

ha senso? Puoi suggerire un approccio migliore?

risposta

7

C'è una domanda molto simile a guide on this. La tua situazione è leggermente diversa in quanto sembra che il tuo modello di stato abbia davvero bisogno di essere polimorfico poiché le cose diverse saranno "statutizzabili".

Per rispondere alla tua domanda, Contatto/Evento has_one Status ha senso per me.

+1

il mio modello di stato è polimorfico .... L'ho modificato sopra .... Mi chiedo se dovrei semplificare le cose dato che sembra difficile cercare su di esso ... più difficile di quanto pensassi – Angela

1

In primo luogo, la relazione has_one non memorizza un ID nel modello corrente. Cerca una chiave esterna nella relativa tabella. Per memorizzare uno status_id in Contatti o Eventi che utilizzeresti appartiene a.

In secondo luogo, a seconda del tipo di informazioni che si sta memorizzando in Stato, perché deve essere la propria tabella separata? Perché non creare una colonna di stato in ogni modello su cui si desidera utilizzare lo stato? Un po 'più di informazioni possono essere utili qui.

+1

Beh ... potrebbe essere. Sembrava che avessi visto l'impostazione di ERD in cui certi attributi piuttosto standardizzati tendevano a essere tabelle separate. Poiché, come ho notato sopra, i valori di stato non cambiano molto, sembrava che sarebbe il genere di cosa nella sua stessa tabella, specialmente dal momento che sarà reso disponibile come elenco a discesa o completamento automatico come attributo. – Angela

2

Solo per completare la risposta in un'impostazione più generale, che può guidare la vostra scelta: l'associazione belongs_to viene utilizzata nel modello che ha la chiave esterna.

+0

questo non è vero . la chiave esterna può essere utilizzata anche su has_many, per quando l'associazione non può essere dedotta. – sabaeus