【问题标题】:MVC pattern and RoR or where must that code be placed? [duplicate]MVC 模式和 RoR 或者该代码必须放在哪里? [复制]
【发布时间】:2015-11-19 03:33:45
【问题描述】:

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

【问题讨论】:

  • 在我看来,它将在控制器中——假设你说它是一个小项目。
  • 视情况而定,但我认为第三方 API 请求应该封装在模块中或至少在模型中。
  • 在我看来,它应该被提取到将与 3party 服务交互的服务中,并且一旦服务从 3rd 得到响应,它就会通知模型,然后模型将采取适当的行动。

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


【解决方案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

【讨论】:

  • 感谢您的回答和链接。
【解决方案2】:

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

app/models/services/

这是我放置的文件夹,所有东西都是service,例如向 API 发出请求并从中进行响应的逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2019-04-03
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    相关资源
    最近更新 更多