私はさまざまな状態で多くのレースを持つレーステーブルを持っています。しかし、私は1つのレースだけが= trueのようにマークされていることを保証する必要があります。ここでは、私がレースモデルバリデーションで使用してきたものを示します。ActiveRecord:特定の属性値を持つレコードは1つだけですか?
# current: boolean
validate :only_one_current
private
def only_one_current
if self.current && (Race.current_race.id != self.id)
errors.add(:base, "Races can have only one current race")
end
end
これはほとんどの場合動作すると思われますが、ときどきそれが起こりませんし、理由がわかりません。それが機能しない場合は、現在の別のレコードが削除された直後に、current = tという新しいレコードの保存を禁止します。私はそれがARの永続性と関係していると思います。
これを行うには、より良い方法が必要ですか?
私はそれを試みたと思う(しばらくしている)。まだ問題があった、正確に覚えていない。コードは大丈夫ですか、それとも良いものがありますか? – Karl
フィルタが最適なオプションです... – sethvargo
フィルタ...リンクや提案はありますか? – Karl