Один из моих объектов ('item') имеет идентификатор ('letter_id') в формате "a", "b", ..., "aa", "ab" и т. Д. Чтобы сгенерировать его, яЯ использую Ruby's String#succ
в методе экземпляра, подобном этому:
def set_letter_id
last = parent.items.all(:order => "letter_id ASC").last
if last.nil?
self.letter_id = 'a'
else
self.letter_id = last.letter_id.succ
end
end
Теперь это прекрасно работает до 28-й буквы.27-е будет правильно генерировать « aa », но тогда значение last
всегда будет возвращать элемент с буквой_идуса « z », потому что порядок возвращаемых элементов не 'я следовал тем же правилам, что и String#succ
.
Я узнал об этом из комментария здесь - но сейчас я изо всех сил пытаюсь найти хорошее решение этой проблемы.В основном проблема заключается в следующем:
"aa".succ #=> "ab" - great, that's what I want.
"z"<=>"aa" #=> 1 - not so great, "z" should actually be less than "aa"
Очевидно, что это не обязательно ошибка, но это затрудняет сортировку и упорядочивание списка letter_ids в этом формате.Кто-нибудь сталкивался с этим и нашел обходной путь или какие-либо предложения, которые я мог бы попробовать?Спасибо!