Rails XML解析 - 我应该将此功能放在控制器或模型中吗?

时间:2012-07-27 19:58:37

标签: ruby-on-rails xml model controller nokogiri

我有一个Rails应用程序,它充当XML服务API的传递。

主要用例如下:

  1. 用户通过http://example.com/model/report将参数发送到Rails。为简洁起见,我们假设表单只提交zip_code=90010
  2. Rails获取zip_code并使用RestClient通过GET请求查询外部XML服务API:http://xmlservice.example.com/report?report_id=1&zip_code=90010
  3. 报告响应通过XML返回。我想通过Nokogiri解析XML并通过report.html.erb输出普通的HTML视图。
  4. 我正在努力弄清楚我的XML(Nokogiri)代码的放置位置。我应该在模型中处理XML还是在控制器中进行所有解析?

    我知道这两种方法都有效,但我想知道最佳做法是什么。这也是背景XML提要抓取,因此它不适合作为夜间运行的延迟作业。它必须24/7回答动态请求。

    请注意,我已从我的应用中删除了ActiveRecord以进行优化。此应用程序不会触及任何数据库。它基本上是XML API的传递,它将为客户端呈现HTML输出。

    我已经阅读过最好使用“瘦调控制器”和“胖模型”,但我看到的大多数Nokogiri示例都在控制器内部有doc = Nokogiri::XML(RestClient.get(myurl, myparams))类型代码。

    那么......型号还是控制器?

    谢谢!

1 个答案:

答案 0 :(得分:1)

我会将代码放在一个类中,该类将获取xml并为您解析xml。

通过这种方式,可以更轻松地对类进行单元测试,以便对返回的XML进行解析或任何其他操作。

该类可以放在lib文件夹中,或者如果它类似于Pseudo Model(带有XML数据库),它也可以放在模型中。这主要取决于类是什么以及您希望如何构建代码库。

更新:这种方法的一个优点,即使您将服务替换为其他内容,您的代码库也可以保持不变,因为您的代码库与此类交互,所以更改将不得不只针对这个班级。接口优势:)