Domanda

Quindi so la distinzione tra il botto (punto esclamativo) e metodi non scoppio di solito è se il metodo modificare l'oggetto stesso o restituire un oggetto modificato separata mantenendo l'originale invariata.

Poi, mentre la costruzione del modello utente nel capitolo 6 del libro, mi sono imbattuto il metodo User.create, che crea un nuovo modello e lo salva al database in un unico passaggio. Nel Michael Hartl di Ruby on Rails Tutorial 3 , scrive che il metodo User.create! "funziona proprio come il metodo create ... tranne che solleva un ActiveRecord :: documenti non validi un'eccezione se la creazione fallisce ".

Sono abbastanza confuso. È il metodo User.create! non seguendo Ruby "Bang-convegno" o sono io completamente perdendo qualcosa? E se sta seguendo la convenzione, come fa User.create! modifica auto, se si tratta di un metodo di classe?

È stato utile?

Soluzione

Sebbene molte classi trattare metodi di scoppio come "un metodo che modifica l'oggetto in posizione", ho come la descrizione dei metodi di scoppio dal Eloquente rubino libro meglio:

In pratica, Ruby programmatori di riserva ! per adornare i nomi dei metodi che fanno qualcosa di inaspettato, o forse un po ' pericoloso

Quindi, in questo caso, il risultato "inaspettato" è che viene sollevata un'eccezione invece di fallire e tornare false.

Altri suggerimenti

Spero che questo aiuti così:

Le versioni scoppio (ad esempio salvare!) Solleva un'eccezione se il record non è valido. Le versioni non-Bang non lo fanno: Salvare e update_attributes ritornano falso, creare e aggiornare solo restituire gli oggetti

.

Fonte: http://edgeguides.rubyonrails.org/active_record_validations.html#when -contravvenga-validazione-accadere-questionmark

Modifica: fonte modificava per risolvere link non funzionante

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