2012-01-03 11 views

risposta

8

Tutto è descritto qui: http://apidock.com/rails/Class/class_attribute

Se si fa clic su "Visualizza sorgente" vedrete che ci sono opzioni disponibili per impostare il valore di default. Lo stai facendo bene.

+1

FYI Non l'ho offuscato ma non sono riuscito a vedere alcuna approvazione per quello che sto facendo sull'URL che hai incollato. In realtà avevo già cercato di vedere se esistesse un'opzione per un valore predefinito. C'è abbastanza magia in Rails che ho voluto ottenere una risposta definitiva. Dopo aver cercato in giro ho trovato questa guida ufficiale di Rails che sta usando lo stesso metodo di inizializzazione come sono http://edgeguides.rubyonrails.org/active_support_core_extensions.html#class-attributes quindi immagino che sia tutto ok! – poochenza

+0

Will upvote, mi dispiace per quello. Sono contento che tu l'abbia trovato. Pls modifica la domanda così posso correggerla. – lzap

+0

Devi modificare almeno un carattere nella tua domanda, altrimenti non posso invocare l'inversione di tendenza ... – lzap

1

Quello che hai fatto funziona bene (a meno che tu non stia ereditando).

Se si eredita da questa classe è possibile utilizzare il metodo inherited per evitare 'perdite'.

def self.inherited(sub_class) 
    self.foobar = self.foobar.clone 
    # or `self.foobar = []` 
end 
+0

AVVISO DI DEPRESSIONE: Sembra che qualcosa (probabilmente un gemma/plugin) stia sovrascrivendo il metodo ActiveRecord :: Base.inherited. È importante che questo hook venga eseguito in modo che i tuoi modelli siano impostati correttamente. È stata aggiunta una soluzione alternativa per impedire che ciò causi un errore in 3.2, ma le versioni future semplicemente non funzioneranno se l'hook è sovrascritto. Se si utilizza Kaminari, eseguire l'aggiornamento poiché è noto che si è verificato questo problema. –

0

Un'opzione default è stato aggiunto il ramo principale di Rails quest'anno, controllare: https://github.com/rails/rails/pull/29270. Con questa modifica, è possibile effettuare le seguenti operazioni:

class Foo < ActiveRecord::Base 
    class_attribute :foobar, default: [] 
end 
Problemi correlati