Domanda

Dato un modello che ha validazioni nel file model_name.rb, come posso accedere a quelle validazioni manualmente? Vorrei preparare il mio sistema di convalida dei moduli che funzionerebbe a fianco dei trucchi Rails integrati e voglio mantenere tutto il più ASCIUTTO possibile. Il mio problema principale è che devo effettuare convalide sul lato server prima che uno qualsiasi dei valori del modulo raggiunga il database (sto usando un modulo a più fasi).

Fondamentalmente mi chiedo se esiste un metodo come

User.validations.each do |v|
    puts v.constraint.to_s + " " + v.message
end

C'è qualcosa di simile a questo?

Grazie in anticipo.

È stato utile?

Soluzione

  

Il mio problema principale è che devo fare   convalide lato server prima di una delle   i valori del modulo colpiscono il database (lo sono   utilizzando un modulo a più fasi).

Se il tuo modello non è valido in base alle convalide nel suo file di classe, i suoi dati non verranno salvati nel database (a meno che non passi false nel save metodo per sopprimere le convalide).

  • Puoi chiedere a un modello se è valido in qualsiasi momento invocando i metodi validi? / non validi? .

Altri suggerimenti

L'oggetto ActiveRecord espone il metodo degli errori dopo che è valido? viene chiamato, che fornisce messaggi sui quali vengono violate le convalide. Potresti verificare valido? e quindi controlla se uno dei campi nella parte del modulo in cui ti trovi non è valido. potresti fare qualcosa del genere per un modulo con campi field1 e field2.

unless x.valid?
  [:field1,:field2].each do |field|
    yes_there_was_an_error if x.errors[field]
  end
end

La soluzione migliore è utilizzare una macchina a stati e archiviare i dati nel database tra le varie fasi del modulo.

Puoi fare ad es. validates_presence_of: username,: if = > proc {| u | u.signup_step > = 2} , dove signup_step è una colonna intera nel database.

Quindi, anche se dici che non vuoi memorizzarlo nel database tra i moduli, penso che dovresti. Se lo fai, puoi utilizzare convalide e modelli regolari, senza attacchi dannosi. E onestamente, dubito che farlo in questo modo sia un problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top