【问题标题】:Correct rails place for no-db data fetching codeno-db 数据获取代码的正确 rails 位置
【发布时间】:2012-10-29 12:25:50
【问题描述】:

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

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

放置此代码的“rails”位置在哪里。

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

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

有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    总的来说,我认为有两种可能的方法:

    1. 创建一个普通的 ruby​​ 类以包含向 API 发出请求和处理来自它的响应的方法。您可以使用include HTTParty 在此类中包含HTTParty 模块。通常将这段代码放在 lib/ 中(确保无论放在哪里,路径都在 autoload_paths 中)。
    2. 如果您正在做任何非常复杂的事情,或者 API 本身很复杂,您可能需要考虑创建一个单独的 gem 来处理与 API 的交互。这种类型的 gem 的术语是“API 包装器”——如果您环顾四周,您会发现其中有很多用于流行服务(Twitter、LinkedIn、Flickr 等)

    请注意,我没有提到 activerecord。如果您不打算将任何内容保存到数据库中,我认为甚至不需要创建任何 activerecord 模型。您可以只使用控制器和视图,然后(如果需要)从 activemodel(验证、国际化等)中挑选和选择组件,以使您的 ruby​​ API 包装类感觉更像 Rails 模型。例如,我在我正在开发的应用程序中所做的一件事是在实际向外部 API 发出请求之前对查询字符串应用验证,这有点像在查询数据库之前对数据库查询运行验证。请参阅 Yehuda Katz 的 this article,了解有关如何使普通的 ruby​​ 对象感觉像 activerecord 模型的更多信息。

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

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多