ActiveResource和ActiveModel有什么区别?

fin*_*oop 14 activerecord activemodel ruby-on-rails-3

作为这个问题的前言:我对Rails开发(以及一般的Web开发)是全新的,我的一些担忧可能没有根据,所以任何反馈都会非常有用.

我正在尝试创建一个插入RESTful API的Rails应用程序.我一直在努力确定最好的方法,从我的理解,它缩小到从头开始制作我自己的模型,利用ActiveModel,或利用ActiveResource.

我不清楚每个的优点/缺点,坦率地说,我还没有完全理解ActiveModel和ActiveResource之间的区别.有人能否为我提供有关这三种选择的见解以及在最佳环境中最具"意义"的内容?谢谢!

最好的答案不仅仅是说"使用ActiveModel"或"使用ActiveResource"以及这样做的说明,但这也会有所帮助.我真的很感激答案解释为什么我应该使用那个东西,等等.

我正在处理的一些约束是我在调用API时需要使用密钥,并且大量的API调用将包含其他参数.

MBH*_*NYC 21

因此,选择在此使用哪个包的关键是:

  1. 您正在从Web API中检索数据,并希望在您的服务器上存储/操作,或
  2. 您通过Web API操作数据,而不打算在服务器上存储任何内容.

如果#1,你将需要ActiveRecord,因为它是用于在Postgres/MySQL/etc数据库上操作和存储数据的Rails包.

如果是#2,您可以独占使用ActiveResource,这将允许您从Web API检索数据,在运行时使用它,然后通过回发到Web API进行更改.

但是,许多应用程序通常会使用这两种软件包.ActiveResource可以非常轻松地获取数据,然后将其应用到您可以在本地使用的ActiveRecord模型(如User或Location等),而无需一遍又一遍地从API中获取数据.

举个例子,对于我正在研究的服务,我从公共源抓取Geolocation数据(查找zipcodes的坐标),然后使用ActiveRecord将该数据保存到本地Location对象,这样我可以反复查找它们而不会有延迟Web API调用.(如果您很聪明,您将不时从Web API刷新此数据)

确定ActiveResource是否适合您

服务请求是否符合文档协议?看期望的响应块中查找方法,例如.如果是这样,你可能会没有额外的工作.

注意:文档与更改日志有点不同步 - 从Rails 3.1开始:

对于所有请求,默认格式已更改为JSON.如果要继续使用XML,则需要在类中设置self.format =:xml.例如.

此外,ActiveResource已完全从Rails 4.0分支中删除,因此如果您期待启动新的rails应用程序并想要最新和最好的,这根本不是一个选项 - 但所有的希望都不会丢失,那里很多使REST风格的界面简单,像互动宝石法拉第(全面披露:我没有用法拉第自己,所以能真正在其疗效发表评论,但我所在它在这里,还有一些其他的选择.

注意(来自上面的相同链接):Active Resource构建在标准XML格式上,用于通过HTTP请求和提交资源.它镜像内置于Action Controller中的RESTful路由,但也可以与正确实现协议的任何其他REST服务一起使用.REST使用HTTP,但与"典型"Web应用程序不同,它使用HTTP规范中提供的所有动词.

如果上面的答案是否定的(它不符合)你需要编写一个包装器类,请参阅Facebooker,了解如何在一个积极维护的gem中完成此操作.

参考资料: 关于ActiveResource的精彩教程

ActiveRecord入门

请记住,如果您刚开始进行Web开发,您还需要了解数据库和模型基础知识 - 您的工作已经完成了.:)

  • ActiveModel和ActiveRecord协同工作,ActiveModel用于抽象/描述数据库中的数据,ActiveRecord是QUERY INTERFACE,用于从数据库中检索模型中的数据.对不起,我可以互换地想到它们,因为你通常不会使用另一个. (2认同)