2012-06-11 17 views
11

Ho questi campi stringa/di testo nel mio database file di migrazione:Convalida ActiveRecord delle rotaie: lunghezza massima di una stringa?

t.string :author 
    t.string :title 
    t.string :summary 
    t.text :content 
    t.string :link 

E questi sono le mie domande:

  1. Ogni attributo di stringa/testo dovrebbe avere una validazione della lunghezza massima per entrambi gli scopi, la sicurezza (se non vuoi ricevere qualche MB di input di testo) e database (se string = varchar, mysql ha un limite di 255 caratteri). È giusto o c'è qualche motivo per non avere una validazione della lunghezza massima per ogni attributo di stringa/testo nel database?
  2. Se non mi interessa la lunghezza esatta dell'autore e del titolo per quanto tempo, poiché non sono troppo lunghi per essere archiviati come stringhe, dovrei impostare una lunghezza massima a 255 per ciascuno di essi?
  3. Se la lunghezza massima possibile dell'URL è di circa 2000 caratteri, è sicuro archiviare i collegamenti come stringhe e non come testi? Devo convalidare una lunghezza massima dell'attributo link se sto già convalidando il suo formato usando regexp?
  4. Un attributo di contenuto (testo) ha una lunghezza massima solo per proteggere il database dall'input di una lunghezza illimitata? Ad esempio, l'impostazione di una lunghezza massima di un campo di testo su 100.000 caratteri è ragionevole oppure è totalmente inutile e inefficiente?

Capisco, che queste domande potrebbero sembrare non importanti per alcune persone, ma ancora - questa è una convalida di input, che è richiesta per qualsiasi applicazione, - e penso che valga la pena di essere piuttosto paranoica qui.

risposta

5

La domanda è ottima, e forse le persone con maggiore conoscenza di interni di rotaie/mysql saranno in grado di espandersi di più.

1) Avere una qualsiasi convalida nel modello dipende da dove si desidera che l'errore si verifichi nel caso in cui superi il limite. Il modello è l'opzione migliore poiché molto probabilmente coprirà la maggior parte degli oggetti usando il modello. Un'altra alternativa è semplicemente limitare i campi del modulo usando l'attributo maxlength.

La prima opzione non funziona per i campi facoltativi.

2) Non sono a conoscenza di alcuna regola empirica. Usa quello che sai è il più lungo e rendilo un po 'più grande.

3) La mia regola è che qualcosa sopra 255 è testo. Puoi trovare maggiori informazioni su questo Here

4) Se la colonna contiene lo stesso contenuto, potrebbe esserci un valore in questo. Alcuni casi d'uso possono avere lunghezza d'onda diversa a seconda del tipo di contenuto o dell'utente.

Tutto ciò è anche influenzato dal modo in cui i requisiti di convalida dei dati sono rigorosi nel progetto.

Problemi correlati