gpt4 book ai didi

ruby-on-rails - 如何从 gem 的上下文中列出 Rails 项目中的所有模型?

转载 作者:数据小太阳 更新时间:2023-10-29 08:39:17 26 4
gpt4 key购买 nike

我正在尝试确定如何完成两个简单的任务:

  1. 我想从 Gem 的上下文中加载 Rails 应用程序的所有模型。例如,假设 Rails 应用程序是一个博客并且有作者、帖子和评论。我希望包含的 gem 在不知道它们存在的情况下找到那些模型。

  2. 同样,从加载的 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

camelize docs

constantize docs

关于ruby-on-rails - 如何从 gem 的上下文中列出 Rails 项目中的所有模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14669885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com