Ruby & ActiveRecord: обращение к целочисленным полям с помощью (уникально отображенных) строк - PullRequest
0 голосов
/ 16 апреля 2010

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

1 Ответ

0 голосов
/ 16 апреля 2010

Другой альтернативой является добавление дополнительного поля в таблицу базы данных для unique_string, а затем использование обратного вызова before_save для помещения закодированного значения в это поле. Затем, после сохранения записи, вы сможете использовать это поле в любом виде find.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...