これは私のモデルの簡素化されたバージョンです。
model Paper
PAPER_STARTING_NUMBER = 1
validate_uniqueness_of :number, :allow_blank => true
before_create :alocate_paper_number
def alocate_paper_number
return true if self.number.present?
p_number = Paper.maximum('number') || Paper::PAPER_STARTING_NUMBER
self.number = p_number >= Paper::PAPER_STARTING_NUMBER ? p_number+1 : Paper::PAPER_STARTING_NUMBER
return true
end
end
問題は、番号列に重複があることです。callback を変更せずにこれを修正できる理由と方法についてのアイデア。データベースに一意性の検証を追加したり、その列にシーケンスを作成したりできますが、他のアイデアはありますか?