2

あるクラスのインスタンスのリストがあります。そのクラスの 1 つのインスタンスを常に「選択」する必要があります。したがって、最初のインスタンスを作成するときは、それを選択済みとして設定する必要があり、選択済みのインスタンスが削除された場合は、そのクラスの別のインスタンスを選択済みとして設定する必要があります。

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 クラスにブール値を追加して、Fruit.last の場合にインスタンスを true に設定するだけでよいでしょうか。

于 2013-07-23T19:19:27.843 に答える
0

Fruit クラスには Fruit 型の静的メンバーが必要であり、お気に入りの果物を指す必要があります

.favorite のテストでは、self==favorite を返す必要があります

make_favorite では、自分自身を指すように変更する必要があります

破壊するときは、 self==favorite かどうかを確認する必要があります。そうであれば、Fruit.all.first を指すようにします - 果物が存在しない場合は null になります

新しい果物を作成していて、お気に入りが null の場合は、新しい果物 (自分) を指すようにします。

この仕組みに問題はありませんか?

于 2013-07-23T19:08:05.173 に答える