首页 > 解决方案 > 在 Rails 中将创建模型和关联逻辑放在哪里?

问题描述

我有一个通过连接表A关联的模型。在控制器的操作中,如果关联存在可选参数,我将创建连接模型,否则仅在没有关联的情况下创建。BABcreateAAAB

如果我将所有逻辑都留在控制器中,那么控制器会变得很胖并且很难测试,并且逻辑不能轻易重用。如果我尝试将逻辑移动到模型中,A那么我只有一个随机方法create_with_AB或类似的方法。感觉不对。

感觉中间应该有一层?我不确定是否有用于处理这种情况的通用模式?

标签: ruby-on-railsrubydesign-patternsmodel

解决方案


您的示例似乎不是很复杂,可以使用评论中提到的嵌套属性来完成。对于更复杂的东西,框架没有提供任何东西,您必须提出自己的抽象。

看看service objects

  1. https://www.engineyard.com/blog/keeping-your-rails-controllers-dry-with-services
  2. https://medium.com/selleo/essential-rubyonrails-patterns-part-1-service-objects-1af9f9573ca1

同样,由于这些是社区抽象,因此没有实现服务对象的标准方法——有些人使用带有调用方法的类,有些人使用模块等。您如何使用它们取决于您对干净代码的定义。


推荐阅读