Как и все эти решения для постоянных ссылок, дружественный идентификатор использует метод parameterize
для преобразования строки в безопасную строку URL. вот так:
require 'active_support/all'
puts "Oh Hai There".parameterize
=> oh-hai-there
Проблема возникает, когда вы используете строки, отличные от ASCII, в которых параметризация заменяется пустой строкой, что вызывает вашу проблему:
# encoding: UTF-8
require 'active_support/all'
puts "신품".parameterize
=>
ActiveSupport предоставляет способ изменить строки, отличные от ASCII, на близкое приближение с помощью метода transliterate
.
# encoding: UTF-8
require 'active_support/all'
include ActiveSupport::Inflector
puts transliterate("Ærøskøbing")
=> AEroskobing
Но если он не знает о символе, по умолчанию он будет ??
# encoding: UTF-8
require 'active_support/all'
include ActiveSupport::Inflector
puts transliterate "신품"
=> ??
Но вы можете сказать транслитерации, как обращаться с символами. Итак, в модели Rails
# Store the transliterations in locales/en.yml
en:
i18n:
transliterate:
rule:
신: "abc"
품: "def"
puts transliterate "신품"
=> "abcdef"
Таким образом, вы можете использовать transliterate(title).parameterize
вместо простой параметризации. И если вы введете корейский алфавит в раздел транслитерации, вы будете близки к золотому.
person
Jesse Wolgamott
schedule
31.05.2013