【问题标题】:How to externalize Rails model (api/gem/plugin)如何外部化 Rails 模型(api/gem/plugin)
【发布时间】:2012-01-01 15:30:01
【问题描述】:

目前我正在开发一个 RoR 应用程序(带有 ActiveRecord 的 2.3.14)(我们称之为 A)。

现在我开始了另一个项目 B(一个使用 capybara 的远程测试应用程序,看起来像这样:https://github.com/searls/remote-capybara-cucumber-example)。

但是现在我需要访问应用程序 B 的模型以设置测试数据(可能还有测试断言)。因此,我想使用现有的模型类(如果需要,还可以使用一些额外的库,如 factory_girl)。

我当然不想将我的项目 B 包装在 Rails 应用程序中并复制模型类。那么有没有办法组织 A 以便 B 可以访问模型并创建/更新/销毁实体?

是否有任何关键字可供进一步研究(我尝试了几个谷歌搜索,其中包含 rails 模型作为 gem、插件、externalize rails 模型等......但没有发现任何有用的东西(主要是 ActiveRecord 的文档)

【问题讨论】:

    标签: ruby-on-rails ruby model


    【解决方案1】:

    Rails 2.x 确实让两个应用程序之间共享模型层变得非常困难。

    如果您不关心两次维护迁移,您可以将模型放入 gem 中,然后在您的应用中使用它。

    另一种方法是将dbapp/models 目录从两个应用程序符号链接到共享文件夹。这很有效,但您必须小心,因为 rake 任务和生成器现在会影响这两个应用程序。

    Rails 3.1 附带了改进的 rails 引擎实现。引擎允许您隔离 Rails 应用程序的各个部分并将它们打包为 gem。

    【讨论】:

    • 你所说的“维护迁移”到底是什么意思,迁移不能仅仅停留在它们之前(在 Rails 应用程序中)还是它们也必须在 gem 中?
    • 您将拥有两个 Rails 应用程序,因此您需要能够在两个应用程序中运行迁移。最简单的方法是将它们复制到两个应用程序中。新的 rails 3.1 引擎有一个更复杂的机制:每个引擎都有一个 rake 任务来将迁移从引擎复制到主机应用程序。这样,您只需编写一次迁移,就可以在任何地方使用它们。希望这会有所帮助。
    • 实际上,第二个应用程序不会是 Rails 应用程序。有问题吗?
    • 不确定 ;) 需要更多关于您要完成的工作的信息。
    【解决方案2】:

    您可以尝试使用别名(符号链接)指向 B 项目中 A 的 app/models 目录。

    在 Mac/Linux 上:

    ln -s /volumes/code/project-a/app/models/ /volumes/code/project-b/models
    

    【讨论】:

    • 没有完整阅读@balu 的回答,但也提到了它以及需要注意的事项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2016-05-17
    • 1970-01-01
    相关资源
    最近更新 更多