2013-03-07 87 views
0

我新的軌道,而我堅持用下面的問題:軌持久化類變量

我需要一個人類可讀的用戶ID的持久化類變量(我認爲)。 客戶類是Single Table Inheritance設置中的聯繫人類的子類,因此數據庫生成的ID不是有用的,因爲它不是線性升序。

我想我需要一個類變量或全局變量來實現一種計數器/ ID(它不是可以刪除客戶的計數方法)。我對麼?在這種情況下,類變量需要以某種方式保存到數據庫中,對嗎?

我有點失去了

  1. 如何保存它
  2. 什麼時候,以增加它:我不得不重寫新的方法, 呼叫的第一超級?
  3. 如何加載的情況下,應用程序需要的價值,在某些時候

重新啓動 。

我應該更喜歡一個Multible Table Inheritence設置,而使用數據庫ID嗎?這將是一個可憐的事情,因爲兩個班的90%以上的領域是相同的。

回答

1

爲什麼你的ID是線性的?爲什麼它不是線性的?

我想你就錯了地方,但以防萬一,我誤解你了,你可以添加一個遷移(一個屬性「generatedID」添加到您的客戶表),並寫一個方法,像這樣:

def generateID 
    if Customer.all.count == 0 
    1 
    else 
    Customer.last.generatedID + 1 
    end 
end 

然後,當你保存Customer對象:

@customer = Customer.new(params[:user]) 
@customer.generatedID = generateID 
@customer.save! 

但這個真的是個不錯的辦法,你可以永諾閱讀對象的ID並顯示給用戶,我真的不知道它止跌」 t是線性的。

+0

您的解決方案不會生成唯一的ID。在創建下一個客戶之前刪除最後一個客戶。這是爲了我的客戶想要具有易識別的ID以快速區分客戶。如果我採用數據庫生成的ID,那麼它與來自其他聯繫人對象的ID混雜在一起。這就是爲什麼他們不是線性的(說實話,我不喜歡這個解決方案) – 2013-03-07 11:12:34

+0

我試過你的解決方案,但它在「全部」調用中產生數據庫錯誤,在測試過程中我完全丟失了:Client ActiveRecord :: StatementInvalid: PGError:錯誤:缺少表「客戶端」的FROM-clause條目 LINE 1:...「WHERE」contacts「。」type「IN('Client')ORDER BY clients.na ... (「客戶」)ORDER BY clients.name DESC – 2013-03-12 10:17:22

+0

顯然它尋找一個表客戶端,而表(STI)是稱爲聯繫人,但類型是客戶端...軌道錯誤? – 2013-03-12 10:23:56