虽然不是我的应用程序解释我的问题的简单方法是假设我正在运行URL缩短器。我不是试图找出我应该使用的下一个字符串作为URL的唯一部分,而是按整数索引我的所有URL并将数字映射到幕后的字符串,基本上只是将数字的基数更改为,比方说,62:az + AZ + 0-9。
在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)
,但这感觉就像在某种程度上作弊!谢谢!
答案 0 :(得分:0)
另一种方法是实际为unique_string
的数据库表添加一个额外字段,然后使用before_save
回调将编码值放入此字段中。然后,保存记录后,您就可以在任何find
种类中使用该字段。