ruby-on-rails - 在 Rails 中将创建模型和关联逻辑放在哪里?
问题描述
我有一个通过连接表A
关联的模型。在控制器的操作中,如果关联存在可选参数,我将创建连接模型,否则仅在没有关联的情况下创建。B
AB
create
A
A
AB
如果我将所有逻辑都留在控制器中,那么控制器会变得很胖并且很难测试,并且逻辑不能轻易重用。如果我尝试将逻辑移动到模型中,A
那么我只有一个随机方法create_with_AB
或类似的方法。感觉不对。
感觉中间应该有一层?我不确定是否有用于处理这种情况的通用模式?
解决方案
您的示例似乎不是很复杂,可以使用评论中提到的嵌套属性来完成。对于更复杂的东西,框架没有提供任何东西,您必须提出自己的抽象。
看看service objects
:
- https://www.engineyard.com/blog/keeping-your-rails-controllers-dry-with-services
- https://medium.com/selleo/essential-rubyonrails-patterns-part-1-service-objects-1af9f9573ca1
同样,由于这些是社区抽象,因此没有实现服务对象的标准方法——有些人使用带有调用方法的类,有些人使用模块等。您如何使用它们取决于您对干净代码的定义。
推荐阅读
- excel-formula - 如何使用百分比在 Excel 中创建五星级评分系统
- c# - 如何在 Div htmlagilitypack 中获取 Div
- javascript - 当我添加另一个具有相同 js 文件的 html 文件时不添加行
- reactjs - TSlint 和 React:如何在导出默认值之前在底部强制执行样式?
- c++ - c++ hpp 文件包含在许多文件中,编译器报告“LNK4006”
- c - C语言中的套接字通信。发送文件内容
- c# - 将变量从另一个类传递到表单中
- c - C程序正在自动关闭
- swift - 图像压缩而不快速改变图像的分辨率
- makefile - 为什么在配方中使用 $(MAKE) 制作“--dry-run”会导致错误?