Хотя это не мое приложение, простой способ объяснить мою проблему состоит в том, чтобы предположить, что я использую сокращатель 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)
, но это как-то обманывает! Спасибо!