儘管它不是我的應用程序,但是解釋我的問題的一種簡單方法是假定我正在運行URL縮短器。我不是試圖弄清楚下一個字符串應該用作URL的唯一部分,我只是用整數索引我的所有URL,並將數字映射到幕後的字符串,基本上只是將數字的基數更改爲,比方說,62:az + AZ + 0-9。Ruby&ActiveRecord:通過(唯一映射的)字符串引用整數字段
在ActiveRecord的,我可以很容易地改變了url_id
領域的讀者,使其返回我的基地62字符串而不是數被存儲在數據庫中:
class Short < ActiveRecord::Base
def url_id
i = read_attribute(:convo)
return '0' if i == 0
s = ''
while i > 0
s << CHARS[i.modulo(62)]
i /= 62
end
s
end
end
但有沒有辦法告訴ActiveRecord接受Short.find(:first,:conditions=>{:url_id=>'Ab7'})
,即。把'解碼'邏輯放到我的Short
ActiveRecord類中?
我想我可以定義我自己的def self.find_by_unique_string(string)
,但那感覺就像是在作弊!謝謝!
有點讓我覺得我需要使用'before_find' - 關於正確的聲音?這個回調是否存在? – 2010-04-15 23:23:26
爲什麼定義你自己的方法就像是作弊?這就是所謂的編程。你似乎尋找的解決方案可能需要猴子修補ActiveRecord,這應該更像是作弊。 – ehsanul 2010-04-16 01:06:24
ActiveRecord是我認爲他們已經爲此計劃的一個深思熟慮的圖書館:P聽起來像你有最好的主意壽! – 2010-04-16 08:29:01