5

Sto cercando un feedback sul mio piano corrente di implementazione di campi personalizzati in rail. Sono nuovo alle guide e allo sviluppo di app in generale e apprezzerei qualsiasi commento da parte di individui più esperti.Campi personalizzati in Rails che fungono da modello per le voci future

Sfondo

L'applicazione: Tenere traccia di alimenti e bevande degustazioni.

Quello che sto cercando di modello:

  • utente crea un nuovo tipo di campione.
  • lo chiamano: "Vino"
  • Decidono per la loro azienda, vorrebbero tenere traccia dei seguenti attributi: Origine, Uva, Società, Elevation, mantenimento della temperatura, e altro ancora.
  • Le uniche ipotesi su un tipo di esempio che il mio database ha realizzato è che ha un Nome. (ad esempio caffè, vino, ecc.) il resto sono tutti campi personalizzati specificati dall'utente.

Ora che è stato creato un tipo di esempio.

  • L'utente inizia a creare campioni del tipo di vino campione.
  • Scelgono di creare il campione, scegliere di tipo Vino.
  • I campi che devono essere compilati sono quelli specificati in precedenza.
  • di origine hanno messo: la Francia, nel tipo di uva: hanno messo chardonnay, ecc ..

-

Il mio piano di approccio è il seguente:

Quando un utente crea il tipo di esempio, memorizza i campi personalizzati come una matrice o in un formato stringa e tienilo sotto una colonna chiamata data.

SampleType
nome
vino

dati
[origin, grape_type, company, ...]

Quando un utente vuole creare un campione di Tipo di vino: alzo lo sguardo del campione digitare wine, per ogni chiave nella colonna di dati, crea fo campi rm. Quando l'utente invia i dati, creo un hash di tutti i nomi dei campi personalizzati e dei relativi dati.I serializzare e conservarla in un hash in una colonna di dati come ad esempio:

Esempio
tipo
vino

dati
{ origin: "France", grape_type: "Pinot Grigio, ... }

Il mio piano in questo momento è utilizzare l'hstore di PostgreSQL per implementare l'hashing nella colonna di dati.

Le mie domande sono:

  1. È questo una valida soluzione per quello che sto cercando di fare?
  2. Si verificheranno problemi quando gli utenti modificano i campi personalizzati che desiderano?
  3. Eventuali altri dubbi che dovrei prendere in considerazione?
  4. Is mongodb e altri tali db sono una scelta migliore per questo tipo di modello?

Sto usando i seguenti link come riferimento: http://schneems.com/post/19298469372/you-got-nosql-in-my-postgres-using-hstore-in-rails http://blog.artlogic.com/2012/09/13/custom-fields-in-rails/

Così come molti altri messaggi di overflow dello stack, tuttavia nessuno sembra utilizzarlo come menzionato sopra.

Eventuali commenti sono apprezzati.

risposta

2

jtgi, avendo fatto qualcosa di simile più volte di quanto voglio ricordare, la mia prima risposta è stata "scappare!" Nella mia esperienza, l'intera cosa sul campo definita dall'utente è un brutto incubo. Presto qualcuno chiederà "posso cercare sull'uva?" oppure "Voglio poter inserire più valori per l'uva". E avanti e avanti, e ti odieresti per sempre scendere da questa strada. :-)

Detto questo, penso che il tuo approccio sia abbastanza decente. Per rispondere direttamente alle tue domande:

  1. Sì, questo è un approccio valido.

  2. Sì, si verificherà un problema quando gli utenti modificano i campi personalizzati che desiderano. (vedi sopra)

  3. Vedere alcune note di seguito.

  4. Potrebbe essere. Sono andato lì prima ancora di aver letto la tua quarta domanda. Con il tuo campo => valore hash, stai comunque implementando una soluzione noSQL, ma non sarà banale implementare ricerche, ricerche, ecc.

Alcuni pensieri:

  • penso che vorrei schierare i dati in una colonna db, piuttosto che utilizzare una funzione db. In questo modo, è puro Ruby e non dipende dal tipo di db. Vedi http://www.ruby-doc.org/core-1.9.3/Marshal.html. Lo sto facendo per memorizzare alcuni dati in un'app in questo momento, ed è piuttosto lucido. Potrebbe essere necessario effettuare il marshalling (l) i dati comunque, se si desidera archiviare oggetti Ruby più complessi delle stringhe.

  • Probabilmente ci arriverete presto comunque, quindi vorrei pianificare la memorizzazione di alcuni "metadati" sugli attributi mentre ci siete. Ad esempio, "uva" è una stringa, lunghezza massima 20, "valutazione" è un numero intero compreso tra 0 e 100. In questo modo puoi rendere la tua forma un po 'più carina e fare qualche convalida rudimentale.

  • Quando vieni a odiare questa funzione, puoi ricordarmi di me. :-)

+0

scrozier, grazie per la risposta. Ho pianificato di implementare analisi di base, cercare, ordinare anche in questi campi, anche se ora sono più stanco riguardo all'implementazione. Non c'è motivo di fare questo genere di cose bene, sembra come se CMS avrebbe dovuto affrontare questo tipo di problema tutto il tempo. Lascerò la domanda aperta ancora per un po 'fino ad accettare una risposta. – jtgi

Problemi correlati