有没有办法在您的Rails应用程序中收集所有模型?

mr_urf

有没有办法让您在Rails应用程序中收集所有模型?

基本上,我可以做以下事情吗?

Models.each do |model|
  puts model.class.name
end
文森特·罗伯特

编辑:看评论和其他答案。有比这更聪明的答案!或尝试将其改进为社区Wiki。

模型不会将自己注册到主对象,因此,Rails没有模型列表。

但是您仍然可以查看应用程序的models目录的内容...

Dir.foreach("#{RAILS_ROOT}/app/models") do |model_path|
  # ...
end

编辑:另一个(疯狂的)想法是使用Ruby反射来搜索扩展ActiveRecord :: Base的每个类。虽然不知道如何列出所有课程...

编辑:只是为了好玩,我找到了列出所有课程的方法

Module.constants.select { |c| (eval c).is_a? Class }

编辑:最终成功列出所有模型,而无需查看目录

Module.constants.select do |constant_name|
  constant = eval constant_name
  if not constant.nil? and constant.is_a? Class and constant.superclass == ActiveRecord::Base
    constant
  end
end

如果您也想处理派生类,那么您将需要测试整个超类链。我通过向Class类添加方法来做到这一点:

class Class
  def extend?(klass)
    not superclass.nil? and ( superclass == klass or superclass.extend? klass )
  end
end

def models 
  Module.constants.select do |constant_name|
    constant = eval constant_name
    if not constant.nil? and constant.is_a? Class and constant.extend? ActiveRecord::Base
    constant
    end
  end
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java-有没有办法在Swing应用程序中隐藏关闭按钮?

有没有办法在Wildfly中禁用自动JSON PATCH应用程序

有没有办法在WebView应用程序中创建还原点?

有没有办法建议Web应用程序中的下载路径?

有没有办法检测应用程序中不需要的修改?

有没有办法限制我的应用程序中GCD产生的线程数?

有没有办法在Android的聊天应用程序中屏蔽或加密号码?

有没有办法回滚所有Django应用程序的迁移?

有没有办法从网络拦截中隐藏应用程序网络调用

有没有办法判断您的应用程序是否正在Microsoft Teams中运行

有没有办法在LWJGL / LibGDX中设置应用程序窗口的位置?

有没有办法在Windows 8中拆分屏幕Metro应用程序?

有没有办法从Java应用程序回调到Rails应用程序?

有没有办法知道您的应用程序中是否存在信号以及存在哪些信号?

有没有办法从JSF中的应用程序范围的bean获取基本URL?

有没有办法使Windows 10中的WPF应用程序不那么“丑陋”?

有没有办法在React Native应用程序中实现某种自动翻译?

有没有办法在Nativescript Android应用程序中创建平面按钮?

有没有办法防止 Mac OS X 中的应用程序窃取焦点?

有没有办法在我的 spring 应用程序中启动内存中的 redis

有没有办法在 GNOME Shell 的应用程序屏幕中获得“模糊搜索”?

有没有办法在flutter中打开其他应用程序

有没有办法从 wpf 应用程序中的 DataGridView 控件获取数据?

有没有办法使用powershell点击应用程序中的按钮

有没有办法在 angular 7 应用程序中以编程方式清除缓存?

有没有办法在 Web 应用程序中调整 Powerpoint 图表?

有没有办法在 android 应用程序中抵消 frida 工具包?

有没有办法使用 JavaScript 在其默认应用程序中打开文件?

有没有办法在 phoenix 应用程序中设置 2 个前端?