我需要一個包含所有型號(class_names)的列表,其末尾具有「Cube」模式。獲取所有型號的列表
例如:
我所有的車型: ModelFoo,ModelBar,ModelBarCube,Mode2BarCube
我需要什麼:
[ 'ModelBarCube', 'Mode2BarCube']
我需要一個包含所有型號(class_names)的列表,其末尾具有「Cube」模式。獲取所有型號的列表
例如:
我所有的車型: ModelFoo,ModelBar,ModelBarCube,Mode2BarCube
我需要什麼:
[ 'ModelBarCube', 'Mode2BarCube']
由於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"
}
你交換@models爲:
@models = ActiveRecord::Base.subclasses.collect { |type| type.name }.sort
ActiveRecord :: Base.subclasses已棄用,請使用#descendants – jvatic 2011-07-27 21:38:04
對於Rails 3的
@models = ActiveRecord::Base.
descendants.
select{|x| x.name[-4..-1] == "Cube"}
我在谷歌上搜索答案如何顯示所有Ralis車型,這裏的答案組合很疲憊,thx。
所以這裏是解決方案的組合on Rails的甚至STI表工作
#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
https://gist.github.com/1347687 – equivalent8 2011-11-08 13:03:36
使用示例https://github.com/equivalent/my_rails_monkeypatch_bunch/ blob/master/automatic_guid_generator/lib/tasks/guid.rake – equivalent8 2011-11-08 15:16:27
@models = ActiveRecord::Base.descendants.map(&:name)
賦予您無論是繼承形式ActiveRecord::Base
所有型號名稱或者是任何現有模型的子類。
它沒有提供完整的模型列表 – bmalets 2014-09-14 18:43:08
此代碼適用於我,但有時會在我需要之前已經需要的模型文件時收到警告。我能夠通過使用expand_path來解決此問題,請參閱http://devblog.avdi.org/2009/10/22/double-load-guards-in-ruby/ – DSimon 2012-06-14 20:09:31
的底部稍微更正一下,希望您不要介意,RAILS_ROOT已更改爲Rails.root – Rubyrider 2013-04-30 11:25:30