尽管它不是我的应用程序,但是解释我的问题的一种简单方法是假定我正在运行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