2009-08-05 24 views

Respuesta

22

Desde rieles doesn No cargue las clases a menos que las necesite, debe leer los modelos de la carpeta. Aquí está el código

Dir.glob(Rails.root + '/app/models/*.rb').each { |file| require file } 
    @models = Object.subclasses_of(ActiveRecord::Base).select { |model| 
    model.name[-4..-1] == "Cube" 
    } 
+1

Este código funciona para mí, excepto que a veces recibo advertencias cuando vuelvo a solicitar un modelo de archivo que ya se había requerido anteriormente. Pude resolver esto usando expand_path, vea la parte inferior de http://devblog.avdi.org/2009/10/22/double-load-guards-in-ruby/ – DSimon

+2

Una pequeña corrección espero que no le importe , RAILS_ROOT se ha cambiado a Rails.root – Rubyrider

21

en los carriles 3 que le intercambia @models para:

@models = ActiveRecord::Base.subclasses.collect { |type| type.name }.sort 
+4

ActiveRecord :: Base.subclasses está en desuso, use #descendientes – jvatic

6

para los carriles 3

@models = ActiveRecord::Base. 
    descendants. 
    select{|x| x.name[-4..-1] == "Cube"} 
3

que estaba buscando en Google la respuesta de cómo mostrar todos los modelos RALIS, La combinación de respuestas aquí fue cansada, thx.

asi que aquí hay combinación de soluciones que funciona incluso para tablas de ITS en los carriles

#Since Rails doesn't load classes unless it needs them, you must read the models from the folder. Here is the code 
Dir[Rails.root.to_s + '/app/models/**/*.rb'].each do |file| 
    begin 
    require file 
    rescue 
    end 
end 

models = ActiveRecord::Base.subclasses.collect { |type| type.name }.sort 

models.each do |model| 
    print model 
    print ' ' 
end 
+0

https://gist.github.com/1347687 – equivalent8

+0

ejemplo de uso https://github.com/equivalent/my_rails_monkeypatch_bunch/ blob/master/generador_guías_automático/lib/tasks/guid.rake – equivalent8

6
@models = ActiveRecord::Base.descendants.map(&:name) 

le da todos los nombres de los modelos que, o bien de forma hereda ActiveRecord::Base o es una subclase de cualquier modelo existente.

+2

Da una lista no completa de modelos – bmalets

Cuestiones relacionadas