【发布时间】:2012-12-12 22:21:35
【问题描述】:
我有一个toys 控制器,用户可以使用它来认领玩具。现在,claim 方法是在控制器级别实现的(就像 answer 建议的那样)。
但是,现在声称确实不应该存在的逻辑变得有点胖了:如果一个孩子已经拥有 3 个玩具,他们就不能声称一个玩具,一个孩子不能声称另一个孩子声称的玩具,等等。该逻辑的合理点(在我看来)在 child 模型中,因为我正在描述一个孩子的行为(他们可以做什么,不可以做什么)。
也就是说,如果我这样做,toys#claim 控制器操作将调用来自child 模型的方法。这是代码异味/不好的做法吗?
(我猜有人会建议我为此使用服务对象。如果你这样做了,你能指出一个简单的教程吗?最近的 RailsCast 对我来说有点太复杂了。)
提前致谢!
【问题讨论】:
-
我会说,将active record 用于除纯 CRUD 之外的任何内容并在控制器中具有应用程序逻辑,这不仅是代码异味,而且是架构错误。但这与任何给定控制器使用的模型层结构没有任何关系。
-
我建议您真正需要的是
Claim模型。 -
@tereško:那我该怎么办?
-
@DanCheail 索赔模型?但这只是一个简单的一对多关联,只需要
toys表中的一个外键即可实现。为什么要为此制作另一个模型? -
但这不仅仅是一个简单的关联——你有一套相当复杂的规则/验证。另外,如果您想开始跟踪以前的索赔、玩具索赔的时间长度等怎么办?
标签: ruby-on-rails model-view-controller