2012-01-13 68 views
4

我有項目和問題。問題編號(不是ID)必須是自動遞增的,但是使用project_id作用域。任何寶石或簡單的方法來實現這一目標?謝謝!導軌:自動增量列與範圍

編輯:acts_as_list將完成這項工作,但如果記錄被刪除呢?下一期將與它的號碼。

回答

2
在您的問題類

belongs_to :project 
before_validation(:on => :create) do 
    self.issue_number = self.project.issues.collect { | issue | issue.issue_number }.max + 1 
end 

(或左右) - 本質上,在創建新對象之前,發現有問題的項目相關的問題,最大的問題數量,增加的是,和使用它爲新的問題編號...

+2

我想我需要在項目表中有數字字段,並只是爲了增加,因爲否則如果有東西被刪除,下一個將會有它的數量。但是,這種方法很整齊。謝謝。 – 7elephant 2012-01-13 07:17:09

+0

僅僅爲記錄設置「destroyed_on」(而不是實際刪除它)並將「實時」範圍應用於針對該類的大多數查詢並不罕見。如果您這樣做,那麼您可以在查詢中包含已刪除的記錄,以確定下一個問題編號。 – elijah 2012-01-13 07:20:35

+1

請注意,如果一次創建多個模型,這可能會受到競爭條件的限制。 – Kris 2016-09-12 15:23:55

0

您可以在項目問題關聯上使用counter_cache並覆蓋項目的decrement_counter什麼也不做。