为无数据采集代码修正导轨位置

时间:2012-10-29 12:25:50

标签: ruby-on-rails

我正在寻找从其他网站获取数据的代码的“rails”设计模式。

我的应用程序中有一个rails控制器,它不是从数据库中获取数据,而是从外部API获取数据或从Web上获取数据。

放置此代码的“rails”位置。

为了快速实现,我只是把它放在模型中,但模型不与数据库交互 - 或者支持标准模型功能 - 所以感觉不对,但我对rails和ruby的理解还不够坚固知道它应该去哪里。

代码的工作方式大致如下 controller调用model.fetchData args 该模型使用HTTParty或类似方式进行调用 处理数据 将其传递回控制器

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

从广义上讲,我认为有两种可能的方法可以做到这一点:

  1. 创建一个普通的ruby类,以包含向API发出请求并处理来自它们的响应的方法(它们)。您可以在此类中包含include HTTParty的HTTParty模块。放置此代码的通常位置是在lib /中(确保无论您放在哪里,路径都在autoload_paths)。
  2. 如果您正在做任何非常复杂的事情,或者API本身很复杂,您可能需要考虑创建一个单独的gem来处理与API的交互。这种类型的宝石的术语是一个“API包装器” - 如果你环顾四周,你会看到它们有很多用于流行服务(Twitter,LinkedIn,Flickr等)。
  3. 注意我没有提到activerecord。如果您不打算将任何内容保存到数据库中,我认为甚至不需要创建任何活动记录模型。您可以使用控制器和视图,然后(如果需要)从activemodel中选择组件(验证,国际化等),以使您的ruby API包装类感觉更像Rails模型。例如,我在我正在处理的应用程序中完成的一件事是在实际向外部API发出请求之前应用验证来查询字符串,这有点像在查询数据库之前对数据库查询运行验证。请参阅Yehuda Katz的this article,了解有关如何使普通红宝石物体感觉像主动记录模型的更多信息。

    希望有所帮助。我昨天回答了另一个与此问题非常类似的问题,您可能也希望看一下这个答案:Using rails to consume web services/apis