2011-09-05 110 views
2

我正在編寫一個rails 3.1程序,它允許用戶通過電子郵件與其他人「共享」圖片。Rails應用程序設計問題

http://myapp.com/pictures/uuid 
:用戶點擊,然後發送電子郵件出人X(誰沒有與我的應用程序進行註冊)的鏈接,將帶他們到畫面「與人x分享這個」

該人點擊鏈接,被帶到我的應用程序,並看到圖片。

這讓我覺得我的數據庫模式應該有一個圖片表有一個UUID作爲主鍵,但我沒有看到這之前(總是自動增量整數)在Rails中完成。我不認爲自動增量會在這裏起作用,因爲人們可以很容易地猜測任意的網址並獲得其他人的照片。

在rails中處理這個問題的最好方法是什麼?

回答

2

您應該只保留表格的主鍵,讓rails自動增量。

我會創建一個字符串,它是X隨機字符+ id.to_s,並將其用作UUID。這種方式很難猜測,仍然保證獨一無二。

如果你希望你的UUID都是相同的長度,你可以對結果UUID做一個哈希變換,但是當你保存的時候你會想要檢查唯一性。

+0

所以你說有另一個數據庫列叫'ExternalId'或東西來表示隨機字符,然後索引呢? –

+0

對,我有第二個數據庫列。您可以在遷移中的該列上創建一個唯一索引以強制執行數據庫級別,但是您應該在您的圖片模型中放入驗證規則以強制應用程序邏輯中的唯一性。 – spike

+0

如果您生成適當的UUID,是否值得驗證唯一性?在這種情況下使用隨機字符+ id.to_s有什麼好處? –