Published | 04/06/2016 |
---|---|
Last Updated | 20/11/2024 |
Khi vào 1 trang web, như thư viện sách/bài hát chẳng hạn, chúng ta thường thấy lựa chọn liệt kê các cuốn ách/bài hát theo chữ cái đầu tiên trong tiêu đề
Việc này là dễ dàng với tiếng Anh khi chỉ có đúng 26 kí tự, nhưng với tiếng Việt thông thường chúng ta sẽ muốn khi nhấn vào kí tự A
, sẽ liệt kê ra các cuốn sách/bài hát có tiêu đề bắt đầu với Ă
hoặc Â
, hơn nữa còn có các kí tự với dấu ví dụ như Ánh sáng
bắt đầu là kí tự Á
. Dưới đây là một QueryObject đơn giản áp dụng cho việc này. Database engine được sử dụng ở đây là Postgres.
class BookByFirstLetterInTitle
class << self
def call letter
pattern = guess_pattern letter
pattern ? Book.where('title ~* ?', pattern) : []
end
private
def guess_pattern letter
case letter.to_s.downcase
when '#'
'^[0-9]'
when 'a'
'^[aàáảãạăằắẳẵặâầấẩẫậ]'
when 'e'
'^eèéẻẽẹêềếểễệ'
when 'o'
'^[oòóỏõọôồốổỗộơờớởỡợ]'
when 'u'
'^[uùúủũụưừứửữự]'
when 'd'
'^[dđ]'
when /(b|c|f|g|h|i|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z)/
'^#{letter}'
else
nil
end
end
end
end