Я хочу автоматически генерировать слаг на основе названия и автора книги, который может быть на любом языке. Используя friendly_id с rails, и когда есть символы не ascii, он просто удаляет их. Я знаю, что технически могу включить, кодируя их следующим образом:
class Resource < ApplicationRecord
extend FriendlyId
friendly_id :title_and_author, use: :slugged
def title_and_author
"#{URI::encode(title)} by #{URI::encode(author)} #{language.language} book"
end
end
Это приводит к длинной строке, которая не удобна для пользователя d0-9b-d0-b5-d0-b4-d0-b8-20-d0-9c-d0-b0-d0-ba-d0-b1-d0-b5-d1-82-20-d0-9c-d1-86-d0-b5-d0-bd-d0-ba-d0-be-d0-b3-d0-be-20-d1-83-d0-b5-d0-b7-d0-b4-by-d0-9c-d0-b0-d1-82-spanish-book
Я хочу, чтобы в URL были слова в родной скрипт, а не закодированная версия. Как слаг может включать русский, японский, китайский и т. Д. c? Я также видел много постов, предлагающих включить гем перевода , но должно быть проще просто сохранить символы ?? Почему это удаление символов в первую очередь?
ОБНОВЛЕНИЕ 1 Благодаря комментарию ниже, вот рабочая модель:
class Resource < ApplicationRecord
extend FriendlyId
friendly_id :title_and_author, use: :slugged
def title_and_author
"#{title} by #{author} #{language.language} book"
end
def normalize_friendly_id(string)
string.gsub(" ", "-")
end
end
ОБНОВЛЕНИЕ 2: Хорошо, русский и немецкий B сейчас работает нормально, но китайские иероглифы сейчас вызывают проблемы. В базе данных слаг будет сохранен как "/哈利波特百科全书-by-J.-K.-Rowling-Chinese-(Mandarin)-book-ed265df6-73d2-4b87-9326-524c2684756d"
, но когда я go на страницу, URL говорит http://localhost:3000/resources/%2F%E5%93%88%E5%88%A9%E6%B3%A2%E7%89%B9%E7%99%BE%E7%A7%91%E5%85%A8%E4%B9%A6-by-J.-K.-Rowling-Chinese-(Mandarin)-book-ed265df6-73d2-4b87-9326-524c2684756d
и выдает ошибку No route matches [GET]
. Даже если я скопирую и вставлю http://localhost:3000/resources/%E5%93%88%E5%88%A9%E6%B3%A2%E7%89%B9%E7%99%BE%E7%A7%91%E5%85%A8%E4%B9%A6-by-J.-K.-Rowling-Chinese-(Mandarin)-book-ed265df6-73d2-4b87-9326-524c2684756d
в браузер, я все равно получаю сообщение об ошибке без маршрута.
ОБНОВЛЕНИЕ 3 Я понимаю, что это больше, чем я предполагал изначально. Я нашел статьи о людях, спрашивающих, как обращаться с другими сценариями, такими как Китайский , Корейский , Арабский c и др. c. но все они предлагают перевести этот конкретный c язык. Разве нет драгоценного камня или способа включить какой-либо язык в URL?
Я видел это Бабоса самоцвет , но у него нет азиатских сценариев