最後にパターン "Cube"を持つすべてのモデル(class_names)でリストが必要です。railsからすべてのモデルのリストを取得
例:
私のすべてのモデル: ModelFoo、ModelBar、ModelBarCube、Mode2BarCube
私が必要なもの:
[ 'ModelBarCube'、 'Mode2BarCube']
最後にパターン "Cube"を持つすべてのモデル(class_names)でリストが必要です。railsからすべてのモデルのリストを取得
例:
私のすべてのモデル: ModelFoo、ModelBar、ModelBarCube、Mode2BarCube
私が必要なもの:
[ 'ModelBarCube'、 'Mode2BarCube']
をRailsはdoesnのので、それが必要な場合以外はクラスをロードしないでください。フォルダからモデルを読み込む必要があります。 Railsの3
@models = ActiveRecord::Base.
descendants.
select{|x| x.name[-4..-1] == "Cube"}
ですここでの答えの組み合わせは、疲れていた。
ので、ここでの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
ActiveRecord :: Base.subclassesは非推奨です。#descendantsを使用してください – jvatic
私は、すべてのRalisモデルを表示する方法を答えるグーグルた:ここではあなたが@modelsを交換したいコードレール3で
Dir.glob(Rails.root + '/app/models/*.rb').each { |file| require file }
@models = Object.subclasses_of(ActiveRecord::Base).select { |model|
model.name[-4..-1] == "Cube"
}
について
@models = ActiveRecord::Base.subclasses.collect { |type| type.name }.sort
https://gist.github.com/1347687 – equivalent8
使用例https://github.com/equivalent/my_rails_monkeypatch_bunch/ blob/master/automatic_guid_generator/lib/tasks/guid.rake – equivalent8
@models = ActiveRecord::Base.descendants.map(&:name)
にも、STIテーブルのために働くのソリューションの組み合わせは、あなたのフォームActiveRecord::Base
を継承するか、既存のモデルのサブクラスのいずれか、すべてのモデル名を与えています。
これはモデルの完全なリストではありません – bmalets
このコードは、既に必要だったモデルファイルを再要求するときに警告が表示されることがあるという点を除いて、私にとっては役に立ちます。私はexpand_pathを使ってこれを解決できました。http://devblog.avdi.org/2009/10/22/double-load-guards-in-ruby/ – DSimon
の一番下をご覧ください、RAILS_ROOTがRails.rootに変更されました – Rubyrider