【问题标题】:Where to put create model and association logic in Rails?在 Rails 中将创建模型和关联逻辑放在哪里?
【发布时间】:2018-08-22 17:07:33
【问题描述】:

我有一个模型A,通过连接表ABB 有某种关联。在 A 控制器的 create 操作中,如果关联存在可选参数,我将创建连接模型,否则仅创建 A 而没有 AB 关联。

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

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

【问题讨论】:

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


【解决方案1】:

您的示例似乎不是很复杂,可以使用评论中提到的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

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

【讨论】:

    猜你喜欢
    • 2011-04-05
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多