将逻辑从控制器转移到模型中是一种很好的做法.但是在任何复杂的系统中,即使大多数方法按照Rails方式是一个衬里,这也总是导致一个非常大的文件.
我使出车型分裂成其他模块和包括他们在原来的模式,例如model_flags
,model_validation
等任何人有更好的办法?
编辑:我选择了一个建议使用ActiveConcern的新答案.此外,对于任何对组织代码感兴趣的人,本文" 使ActiveRecord模型变薄 "应该会有很大帮助.
我意识到这是一个相当古老的问题,并且已被标记为已回答,但它仍然具有良好的Google汁液,因此我认为值得添加...
Rails 3引入了ActiveSupport :: Concern,它可用于模块化模型之间共享的行为.或者,就此而言,减少变得太胖的模型.
DHH本人在这里提供了一个很好的,简洁的例子:
https://gist.github.com/1014971
我不会出于某些原因这样做.
首先,你违背了这样的假设:事情应该是他们应该在哪里,这可能是最初对铁路的最大奖励.如果您在模型中粘贴模型,新人可以轻松地进入您的项目并轻松导航.如果你把它拔出来,你只需添加一个延迟和一些混乱,特别是如果删除某个模块的东西的唯一逻辑是减少模型大小.
其次,你从中获得几乎没有任何东西,你会失去一些东 如今,当几乎所有编辑器和IDE都能减轻大文件的导航难度时,文件大小并不重要.将内容移动到模块实际上需要一些现代的易用性,并且需要您和您的同事或未来的维护者在处理一个模型时跳转几个文件.
这就是说我怀疑拥有的铁杆最佳实践团队会告诉你的是,如果你的模型那么大而复杂,那么你的设计就有缺陷,你的模型可能代表了几个可以分成模型而不是模块的东西.