我有一个Web界面,它使用数据库作为其内容。数据库几乎是任意设计的,没有遵循任何标准。
我想在这个数据库之上编写一些API。我的前端将使用这些API。
我使用ActiveRecord作为ORM。问题是我无法在现有表上定义任何关联或连接,因为这两个操作都希望引用表中的列为id
。
考虑到我不想缓和现有的数据库架构,有什么办法呢?
答案 0 :(得分:3)
定义关联时,可以使用其他选项,例如:foreign_key和:primary_key,以指定有关此类字段名称的详细信息。
belongs_to :person, :primary_key => "name", :foreign_key => "person_name"
答案 1 :(得分:2)
在过去,我尝试使用ActiveRecord来处理遗留数据库,并且成功了,但是,在这样做的时候,我肯定会反对流程。 ActiveRecord不想使用具有不同命名约定的字段和表,因此需要做很多工作。从那以后,它变得更加文明,并且在“不是在这里发明”的态度上更加宽容。但是,它也不是镇上唯一的ORM,而且我已成为Sequel的忠实粉丝。
您可以使用Sequel代替ActiveRecord。这是一个很棒的ORM,可以很好地与遗留数据库配合使用。您可以定义:id
字段应该是什么,并指定所有真实字段和表名称(如果它们未映射到预期格式)。
请查看"Cheat sheet"以了解Sequel的工作原理,并"Sequel for ActiveRecord Users"了解如何替换ActiveRecord以供您使用。
使用:
Sequel-talk group非常活跃,如果您需要帮助,可以指出正确的方向。而且,主要作者杰里米·埃文斯(Jeremy Evens)是项目负责人的一个很好的例子 - 他总是很有帮助。
答案 2 :(得分:0)
考虑使用Sinatra而不是Rails。如果您只想为“丑陋”数据库提供API,请不要以activerecord开头。
添加路由,并直接在您的操作中定义SQL语句。不应该比修补activerecord的预期更昂贵。
答案 3 :(得分:0)
我为您看到了几个选项:
挑选其中一个很大程度上取决于你的要求 - 如果必须保留旧数据,应该多快完成(在这种情况下你不能真正使用1),如何弄乱当前架构是等等,但我认为你应该尝试推进选项1。