MVC模式和RoR或必须放置代码的位置?

时间:2015-11-18 18:37:38

标签: ruby-on-rails ruby model-view-controller

我的任务是从用户那里获取一些数据。下一部分是对第三方站点的API发出永久请求并处理来自它的响应。我不知道这部分应该放在哪里:型号,控制器或模块?应用程序的最后部分将向用户的电子邮件发送状态。

2 个答案:

答案 0 :(得分:1)

处理来自HTTP请求的用户输入通常在控制器中完成。

向rails服务器发送请求,包括用户输入。

请求将路由到适当的控制器操作。在控制器操作中,形成对外部API的HTTP请求,并使用RestClient之类的东西在请求中包含用户输入。

最后,您将向用户发送一封电子邮件,并通过调用发送来包含请求状态!邮件类的方法。

示例:

class UsersController < ApplicationController

    def controller_action
        @user_input = params[:query]

        # Build the external API request URI.
        # Using www.icd10api.com as an example.
        url = Addressable::URI.new(
              scheme: "http",
              host: "www.icd10api.com",
              query_values: {code: @user_input, r: "json", desc: "long"})
        # Perform the external request and parse the response
        resp = JSON.parse(RestClient.get(url.to_s))

        # Finally, deliver the email.
        UserMailer.statuses_email(resp).deliver!

        # Return status code
        render status: 200
    end
end

您始终可以将代码重构为模块,但只有在3个以上的位置使用它才能执行此操作。

如果你不仅仅使用它作为演示应用程序,我会参考Andrew CP Kelley评论中的链接:

Where do API calls go in a ruby on rails MVC framework project?

参考文献:

https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

如果您正在使用rails 4 +:

,您也可能需要考虑一下这些问题

How to use concerns in Rails 4

答案 1 :(得分:0)

我通常将它包装在模块或类中,并将文件放入文件夹

app/models/services/

以下是我放置的所有内容service的文件夹,例如请求API并从中继续响应的逻辑。