我有一些类的实例列表。必须始终“选择”该类的一个实例。因此,在创建第一个实例时,必须将其设置为选中,如果删除了选定的实例,则必须将该类中的另一个实例设置为选中。
apple = Fruit.new
apple.favorite # true
pear = Fruit.new
pear.make_favorite!
apple.favorite # false
pear.favorite # true
pear.destroy
apple.favorite # true
我在开发Rails应用程序时遇到过这种情况几次,总是遇到一个令人不满意的错误诱导回调,试图覆盖所有边缘情况而不会导致无限更新循环。有谁知道这个很好的模式?
答案 0 :(得分:0)
Fruit类应该有一个类型为Fruit的静态成员,它应该指向最喜欢的水果
在测试.favorite时,它应该返回self == favorite
在make_favorite上,您应该将其更改为指向自己
on destroy你应该检查self == favorite,如果是的话,只需指向Fruit.all.first - 如果没有水果就会变成null
如果您正在创建新水果且收藏夹为空,请将其指向新水果(自我)
这种机制有问题吗?
答案 1 :(得分:0)
你可以只使用一个布尔值给Fruit类,如果Fruit.last
将实例设置为true