2016-09-01 3 views
1

Auch wenn Rails.application.config.trackable_models ein vollständiges Array zurückgibt, gibt defined?(Rails.application.config.trackable_models) null zurück.Wie überprüfe ich, ob eine Rails.application.config-Variable definiert ist?

Rails.application.config.trackable_models # => ["NewsItem", "ContentPage", "Event"] 
defined?(Rails.application.config.trackable_models): # => nil 

eine lokale Variable in der gleichen Art und Weise einstellen ist in Ordnung:

foo = ["x"] 
defined?(foo) # => local-variable 

Was ist der richtige Weg für die Existenz einer Konfigurationsvariable zu überprüfen ist, wenn nicht „definiert?“?

Antwort

4

Wenn Sie die Methode überprüfen, im wörtlichen Sinne definiert ist, verwenden respond_to

Rails.applications.config.respond_to?(:trackable_models) 

Wenn Sie, wenn das Verfahren etwas überprüfen möchten, dass andere als nil zurückgibt, haben Sie einige Optionen:

tm = Rails.applications.config.trackable_models 
tm.nil? 
tm.presence || 'default value' 
tm.present? 
tm.blank? 
+1

Danke @steel ... 'respond_to?' Funktioniert perfekt. Der Rest ist nützlich, wenn man annimmt, dass trackable_models definiert ist, sonst führt jeder Aufruf von 'Rails.applications.config.trackable_models' zu" undefined Methode 'trackable_models' " –

Verwandte Themen