在Rails中将创建模型和关联逻辑放在哪里?

时间:2018-08-22 17:07:33

标签: ruby-on-rails ruby design-patterns model

我有一个模型A,该模型通过连接表BAB有关联。在create控制器的A动作中,如果关联存在可选参数,则创建联接模型,否则,仅创建A而没有AB关联。 / p>

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

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

1 个答案:

答案 0 :(得分:4)

您的示例似乎并不复杂,可以使用注释中提到的nested attributes完成。对于更复杂的东西,框架没有提供任何东西,您必须提出自己的抽象。

看看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

再次,因为它们是社区抽象,所以没有实现服务对象的标准方法-有些人将类与调用方法一起使用,某些将使用模块等。如何使用它们取决于干净代码的定义。