Voglio limitare i valori disponibili per un campo. Quindi il valore della colonna deve essere specificato da un insieme di valori. È possibile utilizzare la migrazione/i modelli? O devo farlo manualmente nel mio DB?Come limitare i valori per una colonna
risposta
Userete convalide per questo c'è a whole Rails guide on the topic La specifica aiutante che stai cercando in questo caso è :inclusion
, ad esempio:
class Person < ActiveRecord::Base
validates :relationship_status,
:inclusion => { :in => [ 'Single', 'Married', 'Divorced', 'Other' ],
:message => "%{value} is not a valid relationship status" }
end
Edit agosto 2015: Come di Rails 4.1, è possibile utilizzare il metodo enum
classe per questo è necessario che la vostra colonna essere un. tipo intero:
class Person < ActiveRecord::Base
enum relationship_status: [ :single, :married, :divorced, :other ]
end
Si definisce automaticamente alcuni metodi pratici anche per te:
p = Person.new(relationship_status: :married)
p.married? # => true
p.single? # => false
p.single!
p.single? # => true
Potete leggere la documentazione per enum
qui: http://api.rubyonrails.org/v4.1.0/classes/ActiveRecord/Enum.html
Dipende dalla quantità di sicurezza necessaria. Puoi semplicemente aggiungere un validatore al tuo modello per restringerlo a quei valori, ma non sarai sicuro che i dati esistenti corrisponderanno (e causeranno fallimenti successivi a causa della convalida) e che altre modifiche potrebbero essere apportate da altre app/sql raw che lo aggirerebbe.
Se si desidera una riservatezza assoluta, utilizzare il database.
Ecco cosa si potrebbe desiderare di usare se lo si fa nel database (che è abbastanza limitato rispetto a quello che un validatore rotaie potrebbe fare:.. http://www.w3schools.com/sql/sql_check.asp
Grazie, sì, lo so sulla convalida. E posso specificare le mie restrizioni nel file di migrazione? – damluar
È possibile creare una migrazione che trova quelli che non corrispondono e li aggiorna/cancella. Attenzione però: se utilizzi i tuoi modelli nella tua migrazione, potresti far inciampare le persone se i loro modelli non sono sincronizzati con ciò che la migrazione si aspetta. – Ponny
Grazie per l'aiuto! – damluar
- 1. Scipy.optimize: come limitare i valori degli argomenti
- 2. Come limitare i valori accettabili in una colonna del database da 1 a 5?
- 3. SQL: sommare i valori in una colonna
- 4. selezionando i valori univoci da una colonna
- 5. Modificare una colonna per non consentire i valori nulli
- 6. In Postgres, come si restringono i valori possibili per una particolare colonna?
- 7. Pandas - colonna sostituendo i valori
- 8. Come limitare EditText per inserire solo valori float in Java?
- 9. Modo efficiente per selezionare tutti i valori da una colonna non in un'altra colonna
- 10. Come ottenere i valori di una colonna senza conoscere il tipo di colonna
- 11. Seleziona tutti i valori distinti in una colonna utilizzando LINQ
- 12. MYSQL Inserisce i valori da un'altra tabella in una colonna
- 13. C++ armadillo - assegna i valori alla colonna
- 14. Copia tutti i valori in una colonna in una nuova colonna in un dataframe panda
- 15. sqlite: come popolare la nuova colonna con i valori dopo aver aggiunto una nuova colonna?
- 16. SQLite Selezionare i valori DISTINCT di una colonna senza ordinare
- 17. Come limitare i framework Web
- 18. Ottieni valori colonna per nome colonna non indice colonna
- 19. Come contare i valori distinti in una colonna di un gruppo di panda per oggetto?
- 20. Forza Excel 2007 per il trattamento di tutti i valori in una colonna come testo
- 21. Inserire più valori in una colonna mysql?
- 22. Come visualizzare i valori enum nella colonna datagridview
- 23. Come inserire i valori nella colonna dell'identità automatica in MYSQL
- 24. MYSQL Selezionare su due valori una colonna
- 25. SQL query: creare categoria colonna basata su una colonna varchar nella tabella contenente i valori specifici
- 26. Come sommare i valori di una colonna di una dataframe scintille/Scala
- 27. Raccogli tutti i valori univoci da una colonna e li emette in un'altra colonna ..?
- 28. UBA VBA modifica i valori su TUTTI i fogli. Come limitare a uno?
- 29. sostituire i valori di colonna in una dataframe dai valori di un'altra dataframe
- 30. Come sostituire valori specifici in una colonna del database Oracle?
È possibile impostare il livello di migrazione? – damluar
È possibile impostare vincoli a livello di database - MySQL e PostgreSQL hanno un tipo di colonna 'ENUM', ad esempio, ma SQLite e Oracle no - ma Rails non li supporta direttamente. Puoi utilizzare tipi di colonna non supportati come ad es. 'tcolonna: col nome, 'CUSTOM SQL TYPE'', ma finirai per fare un sacco di gestione personalizzata di quei valori e non sarai in grado di eseguire tali migrazioni su un RDBMS diverso, motivo per cui (tra altri) la documentazione in particolare mette in guardia contro di esso. –
Grazie, amico. Hai aiutato molto! – damluar