Подтвердить что ты не робот

Получить список всех моделей из рельсов

Мне нужен список со всеми моделями (class_names), у которых в конце есть шаблон "Cube".

пример:

все мои модели: ModelFoo, ModelBar, ModelBarCube, Mode2BarCube

что мне нужно:

['ModelBarCube', 'Mode2BarCube']

4b9b3361

Ответ 1

Так как Rails не загружает классы, если они им не нужны, вы должны прочитать модели из папки. Вот код

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

Ответ 2

в рельсах 3 вы замените @models на:

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

Ответ 3

Для Rails 3

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

Ответ 4

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

дает вам все имена моделей, которые либо наследуют форму ActiveRecord::Base, либо являются подклассом любой существующей модели.

Ответ 5

Я ответил на вопрос, как показать все модели Ralis, сочетание ответов здесь было утомительным, спасибо.

так что вот комбинация решений, которая работает даже для таблиц STI в Rails

#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