如何遍历 Rails 应用程序中的所有模型? [英] How can I iterate through all of the Models in my rails app?
问题描述
我希望能够迭代并检查我的 rails 应用程序中的所有模型.在伪代码中,它看起来像:
I would like to be able to iterate over and inspect all the models in my rails app. In pseudo-code it would look something like:
rails_env.models.each do |model|
associations = model.reflect_on_all_associations(:has_many)
... do some stuff
end
我的问题是如何检查我的 rails 应用程序以获取模型的集合 (rails_env.models)?
My question is how do I inspect my rails app to get a collection of the models (rails_env.models) ?
推荐答案
类似于 nathanvda 的回应,使用驼峰而不是大写来支持带下划线的模型文件,并使用 String#constantize 而不是 Kernel.const_get.
Similar to nathanvda's response, use camelize rather than capitalize to support model files with underscores, and use String#constantize rather than Kernel.const_get.
此外,如果您在模型文件夹中保留非活动记录模型(例如用于整合搜索逻辑的搜索类),您需要检查该类是否为活动记录模型.
Additionally, if you keep non-activerecord models in your models folder (e.g. a search class for consolidating search logic), you'll want to check the class is an active record model.
Dir[Rails.root.join('app/models/*.rb').to_s].each do |filename|
klass = File.basename(filename, '.rb').camelize.constantize
next unless klass.ancestors.include?(ActiveRecord::Base)
next if klass.abstract_class?
# do something with klass
end
这篇关于如何遍历 Rails 应用程序中的所有模型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!