ruby-on-rails - 在 Rails MVC 项目中,查询后数据转换应该在哪里进行?模型还是控制器?
问题描述
这是场景...
视图需要以非常特定的格式/方式将数据传递给它(以便很好地适应第三方图表 API)。当从数据库中提取数据时,必须对其进行转换才能满足 View 的需求。
根据 MVC 的原理,这种数据转换应该在哪里进行?
选项:
- 在将数据传递给视图之前,我可以要求控制器中的操作方法从数据库中提取数据并对其进行转换。或者...
- 相反,我可以在模型中创建一个方法来提取和转换数据,然后将其传递给控制器(然后控制器将其传递给视图)。
我选择将所有这些都放在 Model 方法中,如下所示:
def self.rating_chart_data
Film.group(:rating).count.transform_keys{ |key|
key == 1 ? (key.to_s + " Star") : (key.to_s + " Stars")}
end
不过,我对这个决定并不是很有信心。想法?
解决方案
控制器负责处理传入的请求并将处理后的数据传输到视图。所有数据处理都必须在模型级别完成。如果你发现你的模型随着时间的推移而变胖,或者如果有一个可重用的代码组件可以在整个应用程序中使用,那么该代码需要放在模块/关注点/服务中。但是,也有一些视图助手旨在消除视图中的混乱并返回已处理的数据。
这是一篇有用的文章,可帮助您了解如何组织代码结构并正确遵循 MVC 模式。希望有帮助。
推荐阅读
- java - Java中split函数中大写S的计数机制
- amazon-web-services - Cloudfront 是否禁用/启用有效地“使”所有文件“无效”?
- javascript - 切换到 websocket 后如何从 Binance 解析数据
- python - 基于 Tensorflow 的变压器中的输入数据错误
- c++ - wxWidgets 遍历注册表项
- php - PHP Composer:“包 paypal/paypalhttp 已被放弃”
- swift - 在 Swift 中,如果局部变量在闭包中使用,它的作用域是什么?
- python - 如何使用 sys.stdin.read() 输入一组用换行符分隔的字符串
- java - 调用 Module32First 给出无效参数(错误代码 87)
- node.js - 数据库结果到 REST PUT