1

我有一个使用数据库作为其内容的 Web 界面。该数据库几乎是任意设计的,没有遵循任何标准。

我想在这个数据库之上编写一些 API。我的前端将使用这些 API。

我使用 ActiveRecord 作为 ORM。问题是我无法在现有表上定义任何关联或联接,因为这两个操作都需要id在引用表中命名的列。

鉴于我不想修改现有的数据库模式,该怎么做?

4

4 回答 4

3

当您定义关联时,您可以使用附加选项,例如 :foreign_key 和 :primary_key 来指定有关此类字段名称的详细信息。

belongs_to :person, :primary_key => "name", :foreign_key => "person_name"
于 2013-01-14T13:05:01.717 回答
2

过去,我尝试使用 ActiveRecord 处理遗留数据库,并且成功了,但是,这样做肯定是在逆流而上。ActiveRecord 不想使用具有不同命名约定的字段和表,因此需要做很多工作。从那以后,它变得更加文明,并且在“不是这里发明”的态度上更加宽容。但是,它也不是镇上唯一的 ORM,而且我已经成为这类任务的 Sequel 的忠实粉丝。

您可以使用Sequel作为 ActiveRecord 的替代品。这是一个很棒的 ORM,可以很好地与遗留数据库配合使用。您可以定义您的:id字段应该是什么,以及指定所有真实字段和表名(如果它们未映射到预期格式)。

查看“备忘单”了解 Sequel 的工作原理,查看“Sequel for ActiveRecord Users”了解它如何替代 ActiveRecord 供您使用。

利用:

Sequel-talk 小组非常活跃,如果您需要帮助,可以为您指明正确的方向。而且,主要作者 Jeremy Evens 是项目负责人的一个很好的例子——他总是乐于助人。

于 2013-01-14T13:28:34.667 回答
0

我为您看到了一些选择:

  1. 您使用 ActiveRecord 重建架构,然后编写一些脚本将旧数据导入新架构;(最好的解决方案 IMO,虽然很耗时)
  2. 您不使用 ActiveRecord,而是直接访问数据库;(丑陋的)
  3. 正如 thorsten müller 所建议的那样,您继续将 ActiveRecord 与旧数据一起使用,并使用特殊参数来告诉 Rails 将哪些列用作键等。(最丑陋的,需要相当多的修改)

选择其中一个很大程度上取决于您的要求——应该完成多快,是否必须保留旧数据(在这种情况下,您不能真正使用 1.),当前模式有多混乱等等.,但我认为你应该尝试推动选项1。

于 2013-01-14T13:15:27.357 回答
0

考虑使用 Sinatra 而不是 Rails。如果您只想为“丑陋”的数据库提供 API,请不要从 activerecord 开始。

添加您的路线,并直接在您的操作中定义 SQL 语句。不应该比修改 activerecord 的期望更昂贵。

于 2013-01-14T13:07:17.443 回答