从Rails中的对象列表中进行单个选择的好模式是什么?

时间:2013-07-23 07:48:44

标签: ruby-on-rails design-patterns

我有一些类的实例列表。必须始终“选择”该类的一个实例。因此,在创建第一个实例时,必须将其设置为选中,如果删除了选定的实例,则必须将该类中的另一个实例设置为选中。

apple = Fruit.new
apple.favorite        # true

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

pear.destroy
apple.favorite        # true

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

2 个答案:

答案 0 :(得分:0)

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

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

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

on destroy你应该检查self == favorite,如果是的话,只需指向Fruit.all.first - 如果没有水果就会变成null

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

这种机制有问题吗?

答案 1 :(得分:0)

你可以只使用一个布尔值给Fruit类,如果Fruit.last

将实例设置为true