Получить список всех моделей из рельсов
Мне нужен список со всеми моделями (class_names), у которых в конце есть шаблон "Cube".
пример:
все мои модели:
ModelFoo, ModelBar, ModelBarCube, Mode2BarCube
что мне нужно:
['ModelBarCube', 'Mode2BarCube']
Ответы
Ответ 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