如何在 Gem 中访问 Rails App 的`ActiveRecord::Base.connection`?

问题描述 投票:0回答:1

我正在开发一个将由 Rails 应用程序使用的 Ruby gem。在其中,我想使用Rails应用程序本身使用的数据库连接(ActiveRecord::Base.connection)。

gem 将被调用:

  • 通过耙子任务。
  • 通过 Rails 控制台

问题来了: 当我从 gem 中调用 ActiveRecord::Base.connection 时,它会引发错误:

No database connection defined

我认为这是因为 gem 不会自动从 Rails 应用程序继承数据库连接设置。

我想要实现的目标: 我希望 gem 能够无缝地利用 Rails 应用程序的数据库连接,而不需要从应用程序端进行额外的设置。

示例代码: 这是我正在尝试做的事情的简化示例:

我的问题: 如何配置我的 gem,以便它自动使用 Rails 应用程序的数据库连接?

在开发与 Rails 数据库连接交互的 gem 时,我应该注意哪些最佳实践或陷阱?

附加信息: Rails 应用程序运行在 >= Rails 7 上并带有 ActiveRecord。

任何指导或代码示例将不胜感激!

ruby-on-rails ruby activerecord rubygems
1个回答
0
投票

最常见的模式是使用 Rails 引擎。 Rails 引擎不是与真实的数据库交互,而是允许您通过将其行为注入到 gem 中来复制 ActiveRecord::Base(和其他 Rails 类)的功能。通过这样做,您可以测试实现,而无需实际的数据库连接。这样做

最流行的用例之一可以在 Devise 代码库上看到。您可以在此处查看一些示例。

有关更多信息,请参阅:引擎入门文档

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.