20 votes

Obtenir une liste de tous les modèles de rails

Je besoin d'une liste avec tous les modèles (class_names) qui ont le motif "Cube" à la fin.

exemple:

tous mes modèles: ModelFoo, ModelBar, ModelBarCube, Mode2BarCube

ce que je besoin:

['ModelBarCube', 'Mode2BarCube']

24voto

GuccizBud Points 11

Étant donné que Rails ne charge pas les classes à moins qu'il en ait besoin, vous devez lire les modèles du dossier. Voici le code

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

22voto

Jeff Schoolcraft Points 301

Dans rails 3, vous échangeriez @modèles pour :

@modèles = ActiveRecord::Base.subclasses.collect { |type| type.name }.sort

8voto

Amit Thawait Points 1538
@models = ActiveRecord::Base.descendants.map(&:name)

vous donne tous les noms de modèle qui héritent soit de ActiveRecord::Base soit sont une sous-classe de tout modèle existant.

6voto

mike Points 293

Pour Rails 3

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

4voto

equivalent8 Points 2009

J'étais en train de chercher sur Google comment afficher tous les modèles Ralis, la combinaison de réponses ici était très utile, merci.

voici donc une combinaison de solutions qui fonctionne même pour les tables STI sur Rails

# Comme Rails ne charge pas les classes sauf si elles en ont besoin, vous devez lire les modèles du dossier. Voici le 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X