Ruby on rails Sinatra API服务器通过Activerecord访问现有数据库:关于验证

Ruby on rails Sinatra API服务器通过Activerecord访问现有数据库:关于验证,ruby-on-rails,database,activerecord,sinatra,sinatra-activerecord,Ruby On Rails,Database,Activerecord,Sinatra,Sinatra Activerecord,我正在试验伟大的Sinatra环境,以实现一个JSONAPI服务器,该服务器可以访问“遗留”数据库中的数据(一个现有的数据库,已经在生产中) 我命令sinatra activerecord gem访问我的数据。简单到包括在Sinatra应用程序中,简单的贴花: class Exam < ActiveRecord::Base end 课堂考试

我正在试验伟大的Sinatra环境,以实现一个JSONAPI服务器,该服务器可以访问“遗留”数据库中的数据(一个现有的数据库,已经在生产中)

我命令sinatra activerecord gem访问我的数据。简单到包括在Sinatra应用程序中,简单的贴花:

class Exam < ActiveRecord::Base
end
课堂考试
我正在使用tux(rails控制台的等价物)来查询我的模型(表)

现在,在通过API调用插入新记录的情况下,我对下面解释的两种不同场景有一个架构上的疑问(比如说,创建/更新记录的POST客户端请求):

情景1。现有数据库作为(我的)Rails项目的一部分,已投入生产

假设我的生产数据库(postgresql实例)是我自己开发的Rails项目的一部分,所以我有我的Activerecord Models.rb代码,其中包含相当复杂的验证方法;通过示例,上面提到的模型exam.rb由一些复杂的正则表达式验证方法的上千行组成

在这种情况下,避免模型源代码重复(以及可能出现的不匹配错误)的最佳技术解决方案是什么?我必须在Sinatra应用程序中完成我的任务,这是一个OS symbolik链接到原始Rails model exam.rb

场景2。其他人开发的现有数据库

因此,假设我可以访问数据库表,但我没有关于应用程序数据“验证”的任何源代码(可能是用Java开发的,或者由于某些原因我无法访问的任何代码…)

在这种情况下,我认为方法是在ruby activerecord中重新编写验证;对吧?

对不起,我的邮件太长了

乔治 关于.me/solyaris

场景1。现有数据库作为(我的)Rails项目的一部分,已在prod中 你有三个选择(在我看来):

  • 通过Rack和Rails应用程序(在config.ru中)安装Sinatra应用程序,然后它将能够访问与Rails应用程序相同的代码

  • 将数据库代码放入自己的库中,放入gem,让两个应用程序都需要gem

  • 将现有数据库包装在一个数据API中,该API不提供页面,只提供数据(这可能是您试图使用Sinatra所做的)。从Rails应用程序中直接访问数据库,并让它像其他客户端一样调用新的API

  • 我相信方案2比方案1好,方案3比方案2好。如果我要转到选项3,那么我可能会先做1,然后做2,然后做3,因为每个人都可以使用前面的选项来简化

    情景2。其他人开发的数据库
    我不确定我是否完全理解,但是的,您必须重新编写验证。一个设计良好的数据库意味着一些验证应该已经以约束的形式存在,但并不总是如此。

    感谢iain对场景1提出的有用建议,是的,我同意三种情况的进展。