Ruby & ActiveRecord: referring to integer fields by (uniquely mapped) strings
Posted
by JP
on Stack Overflow
See other posts from Stack Overflow
or by JP
Published on 2010-04-15T23:13:08Z
Indexed on
2010/04/15
23:23 UTC
Read the original article
Hit count: 185
ruby
|activerecord
While its not my application a simple way to explain my problem is to assume I'm running a URL shortener. Rather than attempt to try and figure out what the next string I should use as the unique section of the URL, I just index all my URLs by integer and map the numbers to strings behind the scenes, essentially just changing the base of the number to, let's say, 62: a-z + A-Z + 0-9.
In ActiveRecord I can easily alter the reader for the url_id
field so that it returns my base 62 string instead of the number being stored in the database:
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
but is there a way to tell ActiveRecord to accept Short.find(:first,:conditions=>{:url_id=>'Ab7'})
, ie. putting the 'decoding' logic into my Short
ActiveRecord class?
I guess I could define my own def self.find_by_unique_string(string)
, but that feels like cheating somehow! Thanks!
© Stack Overflow or respective owner