为什么控制器操作应该调用一个模型方法而不是初始查找或新的?

时间:2013-07-27 15:27:58

标签: ruby-on-rails ruby ruby-on-rails-3 actioncontroller

我的模型中的函数中几乎包含所有“共享”语句。问题是当我需要在我的控制器中使用多个这些函数时,我收到以下错误:

  

控制器操作应该调用除初始之外的一个模型方法   找到或新

并且IDE更深入地解释:

  

如果控制器操作包含多个操作,则此检查会发出警告   模型方法调用,在初始.find或.new之后。这是推荐的   您在模型类中实现所有业务逻辑,并使用   一种访问它的方法。

这是否意味着所有逻辑都应放在更复杂的模型函数中?我认为控制器的工作是调用模型函数并将结果传递给视图。

如果我将模型函数代码放回控制器,一切都会正常工作,但我会在所有控制器操作中得到代码重复。

那么,这里的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

警告消息确实意味着逻辑应该放在单个模型函数中,但不一定是更复杂的函数。为避免模型重复和/或“胖模型”问题,您可能需要引入模型所依赖的其他类。

是的,控件的工作是调用模型函数,但仅作为薄单板,根据初始创建/查找之外的每个控制器操作的一个模型函数的检查指南。

我不确定我是否理解您在控制器中获取代码重复的注释,如果您将功能重新移回,因为您始终可以在控制器级别引入共享功能。但同样,这不是推荐的“瘦控制器”和“相当薄的模型”的方法,而是根据需要提供支持类。