2012-01-01 35 views
2

目前我正在使用RoR应用程序(2.3.14和ActiveRecord)(我们称之为A)。如何外化Rails模型(api/gem/plugin)

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

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

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

是否有任何的关键字进一步研究(我试过含轨道模型作为宝石几个谷歌搜索,作为一个插件,外部化轨道模型等...但止跌回升没什么用处(ActiveRecord的大多文档)

回答

1

Rails 2.x确实很难在两个应用程序之间共享模型层

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

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

Rails 3.1附带改进的rails引擎实现。引擎允许您隔离轨道应用程序的一部分,并将它们打包为宝石。

+0

究竟你“维护移民”的意思可能不是迁移只是停留是他们(在Rails应用程序),或者他们必须要在创业板以及? – leifg 2012-01-02 08:55:19

+0

您将拥有两个rails应用程序,因此您需要能够在两个应用程序中运行迁移。最简单的方法是将它们复制到两个应用程序。新的rails 3.1引擎具有更复杂的机制:每个引擎都有一个rake任务,可以将引擎中的迁移复制到主机应用程序。这样,您可以编写一次迁移,并可以在任何地方使用它们。希望这可以帮助。 – balu 2012-01-02 21:46:34

+0

其实,第二个应用程序不会是Rails应用程序。那是问题吗? – leifg 2012-01-03 09:02:55

-1

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

在Mac/Linux的:

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

没有阅读@ balu的答案,但它在那里也提到了要注意的事情。 – Jurgen 2012-01-19 02:30:07