是否有一种方法可以获得Rails应用程序中所有模型的集合?
基本上,我能做的是:-
Models.each do |model|
puts model.class.name
end
是否有一种方法可以获得Rails应用程序中所有模型的集合?
基本上,我能做的是:-
Models.each do |model|
puts model.class.name
end
当前回答
可以检查一下
@models = ActiveRecord::Base.connection.tables.collect{|t| t.underscore.singularize.camelize}
其他回答
Module.constants.select { |c| (eval c).is_a?(Class) && (eval c) < ActiveRecord::Base }
一行:Dir['app/models/\*.rb']。map {|f|文件。basename .camelize (f,“。*”)。constantize}
这对我很管用。特别感谢上面所有的帖子。这将返回所有模型的集合。
models = []
Dir.glob("#{Rails.root}/app/models/**/*.rb") do |model_path|
temp = model_path.split(/\/models\//)
models.push temp.last.gsub(/\.rb$/, '').camelize.constantize rescue nil
end
为了避免预加载所有Rails,你可以这样做:
Dir.glob("#{Rails.root}/app/models/**/*.rb").each {|f| require_dependency(f) }
require_dependency(f)和Rails.application.eager_load!用途。这应该可以避免已经要求的文件错误。
然后你可以使用各种解决方案来列出AR模型,如ActiveRecord::Base.descendants
ActiveRecord:美国:基地connection。表