2

我有某个类的实例列表。必须始终“选择”该类的一个实例。因此,当第一个实例被创建时,它必须被设置为选中,如果一个选中的实例被移除,另一个来自该类的实例必须被设置为选中。

apple = Fruit.new
apple.favorite        # true

pear = Fruit.new
pear.make_favorite!   
apple.favorite        # false
pear.favorite         # true

pear.destroy
apple.favorite        # true

我在开发 Rails 应用程序时遇到过几次这种情况,并且总是以令人不满意的、引起错误的一堆回调来尝试覆盖所有边缘情况而不会导致无限更新循环。有谁知道一个很好的模式?

4

2 回答 2

0

如果 Fruit.last,您是否可以只使用向 Fruit 类添加一个布尔值并将实例设置为 true

于 2013-07-23T19:19:27.843 回答
0

Fruit 类应该有一个 Fruit 类型的静态成员,它应该指向最喜欢的水果

在测试 .favorite 时,它​​应该返回 self==favorite

在 make_favorite 上,您应该将其更改为指向自己

在销毁时,您应该检查是否 self==favorite ,如果是,只需使其指向 Fruit.all.first - 如果不存在水果,它将变为 null

如果您正在创建新水果并且收藏夹为空,则使其指向新水果(自我)

这个机制有问题吗?

于 2013-07-23T19:08:05.173 回答