作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试确定如何完成两个简单的任务:
我想从 Gem 的上下文中加载 Rails 应用程序的所有模型。例如,假设 Rails 应用程序是一个博客并且有作者、帖子和评论。我希望包含的 gem 在不知道它们存在的情况下找到那些模型。
同样,从加载的 gem 的上下文来看,我希望 Rails 模型可供我使用;因此,例如,我可以在不知道作者存在的情况下调用 Author.first,并且我希望 gem 可以使用该信息。
所以总结一下这个问题。 在 gem 的上下文中,如何加载 Rails 项目的所有模型并访问这些模型?
这是我的快速技巧:
module ActiveTest
class Base
def listme
::ActiveRecord::Base.subclasses.collect { |type| type.name }.sort
end
end
end
1.9.3-p286 :005 > a = ActiveTest::Base.new
=> #<ActiveTest::Base:0x007f8882bdd460>
1.9.3-p286 :006 > a.listme
NameError: uninitialized constant ActiveRecord
最佳答案
使用ActiveSupport
models = Dir["#{Rails.root}/app/models/**/*.rb"].map do |f|
f.chomp('.rb').camelize # works with namespaces e.g. Foo::Bar::MyClass
end
如果您想将这些字符串转换为实际的 Class
对象,请在 camelize
之后添加一个 constantize
关于ruby-on-rails - 如何从 gem 的上下文中列出 Rails 项目中的所有模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14669885/
我是一名优秀的程序员,十分优秀!