Generatoare de steaguri pentru un model în RoR

Fac o aplicație ruby on Rails și conștientiz că clasa mea de utilizatori ar putea ajunge cu multe atribute generice boolean/integer. De exemplu, să presupunem că am o promovare în fiecare trimestru și vreau doar ca o persoană să poată utiliza o singură dată promoția. Apoi, va trebui să fac o nouă coloană în fiecare trimestru has_used_promotion_N pentru a urmări acea promoție.

În mod alternativ, mă gândesc să creez o nouă coloană numită "Generic Flags", care este doar o valoare separată prin virgulă a steagurilor setate pe cont. De exemplu:

"has_used_promotion_1, has_used_promotion_2, limit_on_feature_a = 20" etc. poate fi setat pentru un anumit utilizator

(sau poate o voi stoca ca JSON)

În orice caz, mă gândesc să-mi ofer un fel de funcționalitate asemănătoare NoSQL în DB-ul meu.

Este un design foarte rău dintr-un motiv? A mai făcut altcineva asta înainte? Orice îmi lipsește complet despre RoR?

0
Aveți grijă să implementați o bază de date în interiorul bazei dvs. de date. Vei crea mai multă muncă pentru tine decât va trebui.
adăugat autor benzado, sursa

2 răspunsuri

În opinia mea, promovarea ar trebui să fie un model separat, cu o relație multiplă cu mulți dintre utilizatori. Când aveți o promoție, creați o instanță de promovare și atunci când o persoană utilizează această promoție, adăugați această persoană la relația promotion.users.

Aceasta este mult mai bună decât ideea dvs., deoarece acum puteți interoga aceste relații. Vrei o listă cu toți utilizatorii care au utilizat prima promoție? Nici o problema. Puteți face acest lucru cu soluția dvs., dar trebuie să recurgeți la unele hacking (este un cuvânt?) Pentru a face acest lucru, și va trebui să parseze șirul de plicuri generice pentru fiecare utilizator pe fiecare interogare. Nu este ideal să spun cel mai puțin.

3
adăugat

Dacă există o colecție de asociații cu dimensiuni arbitrare, atunci ar trebui să fie o relație reală, modelată folosind DB-urile existente și facilitățile. Promoțiile sună așa, și se pare că ar fi ceva ce ați fi modelat deja în DB; nici un motiv real pentru păstrarea unei ierarhii de valori duplicate.

În cazul emblemelor de fapt -generice, puteți avea o tabelă cu nume de pavilion și puteți utiliza din nou o asociere reală.

ar putea să serializeze doar un obiect de pavilion într-o coloană de text. Cu toate acestea, acest lucru vă împiedică capacitatea de a efectua căutări triviale pe o valoare de pavilion/pavilion. Este posibil ca acest lucru să nu conteze pentru un tampon de steaguri asociate unui singur utilizator despre care nu vă interesează dacă nu sunteți conectat (ă), dar pur și simplu mergeți - depinde de utilizarea casetei.

0
adăugat