2010-01-30 57 views
1

假設我有Post模型。當我刪除最後一篇文章'Post 24'時,我希望下一篇文章採用Post 24而不是Post 25的編號。如何在Rails中重複使用刪除的模型ID號?

我想在視圖中顯示id,我不想丟失數字。我怎麼做?

感謝您的幫助。

+1

請注意:當詢問SQL答案時,說明您正在使用的是什麼類型(mysql,sqlserver,oracle等)很有幫助 – 2010-01-30 05:32:12

回答

5

一個id的目的不過是一個內部標識符。它不應該公開使用。這不是一個Rails的東西,而是一個數據庫問題。 MySQL不會收回ID,因爲它可能會導致您的應用程序出現非常嚴重的問題。如果一條記錄被刪除,它的ID將被永久擱置,這樣以後的記錄就不會被誤認爲是。

但是,有一種方法可以做到你想要的。我相信你想要一個position整數列。將其添加到您的模型/表格中,然後安裝acts_as_list plugin

安裝它通常的方式:

script/plugin install git://github.com/rails/acts_as_list.git 

那麼「鉤」添加到你的模型:

class Post < ActiveRecord::Base 
    acts_as_list 
end 

現在你的崗位模型的position欄會自動跟蹤本身不帶序列差距。它甚至會給你一些方便的方法來重新排序,如果你願意的話。

+0

+1這正是我正在考慮閱讀問題的答案,包括使用acts_as_list。 – 2010-01-30 04:46:15

+0

啊,我看到了...我想要顯示帖子在我的「存檔」列中的數目。感謝您的建議。 – 2010-01-30 05:43:14

+0

如果你已經有了一個不同的整數列要使用,或者你不想調用它的位置,你可以用一個參數調用鉤子:「acts_as_list:column =>'archive'」,例如。 – 2010-01-30 05:48:05

0

相反,你可以讓SQL這樣做本身:

SELECT rownum AS id, [whatever other columns you want] 
FROM posts_table 
WHERE [conditions] 
ORDER BY [ordering conditions] 

這將號碼添加到每行不跳過任何像你說的。

注:我使用Oracle。我不知道這個確切的代碼是否可以用其他方式工作。