动态改变铁轨

时间:2012-06-26 17:43:00

标签: ruby-on-rails ruby nosql metaprogramming

我对ruby和rails都很陌生,但对java,javascript和一点python有经验。

我正在考虑创建一个Web应用程序,在该应用程序中应该可以创建具有各种属性和连接(关系)的不同事物(模型)。 Ruby on Rails似乎支持一些无模式后端(mongodb,neo4j等),所以它引起了我的兴趣。 是否可以构建一个Web界面来创建新的RoR模型,为它们添加属性和关系?我希望Web界面中的用户操作转换为RoR服务器上具有指定属性的新模型。当然,这些模型应该以某种方式持久存在(它们可能会被保存为ruby文件吗?)。 我想你可以在某些方面将它看作CMS。

我应该在Google上搜索哪些工具或概念?

关于奥斯卡

1 个答案:

答案 0 :(得分:2)

当然可以做你所要求的,有几种不同的方法,但我建议你更深入地了解你的要求。

在Ruby以外的语言中,我帮助过其他建筑师&构建类似的元建模CMS框架。第一个是在1999年完成的:完整的Web GUI,用于直接从浏览器创建模型和它们之间的关系。我们当时必须这样做的原因是我们使用的底层平台使得创建模型和执行MVC变得相当困难,所以我们必须帮助开发人员使用框架代码和GUI工具。

Ruby作为一种语言非常适合内部domain specific languages。 Rails使用内部DSL很多,特别是在ActiveModel中。因此,为Rails模型编写基本代码通常要容易得多,然后使用其他(更高)抽象级别。特别是GUI工具在构建好的模型时非常难以处理,因为需要进行往返:需要能够手动更改代码并将更改反映在GUI中。这是一个棘手的问题。

尽管如此,如果您仍想使用基于GUI的元建模方法,您可以选择两种主要路径:

  1. 构建参数化RoR元模型
  2. 生成特定的RoR模型
  3. 从你的问题的措辞来看,你似乎对(2)感兴趣。在这种情况下,有两种标准方法可以解决这个问题:您要么解释要么编译。如果你解释那么你创建一个DSL来描述模型,它的执行实例化Rails环境中的模型。 (在Ruby类中是通过执行定义它们的代码来定义的,所以这一切都很正常。)如果你编译的话,那么代码生成使用你最喜欢的持久性框架的标准RoR模型。然后问题就变成了保存代码的位置。您可以将其写入磁盘并加载它。例如,您也可以将其存储在数据库中。在这两种情况下,您可能希望查看诸如sourcify之类的宝石。

    另外,如果您选择构建这种类型的系统,我强烈建议您使用NoSql面向文档的持久性机制,例如使用类似Mongoid的MongoDB。原因是Rails为SQL模式管理提供了有限的支持,甚至更少的工作流自动化(超出基本迁移)。给人们一个GUI,他们可能会更频繁地混乱架构。因此,您必须处理架构迁移问题。文档数据库使这更简单(部分是通过将问题留给代码来以懒惰的方式处理问题)。关系数据库通常不允许您这样做。它们需要前期架构迁移工作,这将为您的系统增加许多要求,并对整个开发人员工作流程造成摩擦。

    祝你好运!