Rubyで投稿タイトルをスラッグに変換するにはどうすればよいですか?
タイトルには任意の文字を使用できますが、スラッグのみを許可する[a-z0-9-_]
必要があります (他の文字を許可する必要がありますか?)。
だから基本的に:
- すべての文字を小文字にする
- スペースをハイフンに変換する
- 余分な文字を削除する
これはレールですか?(シナトラで動作します)
string.parameterize
それでおしまい。さらに洗練されたスラッギングについては、ActsAsUrlを参照してください。次のことができます。
"rock & roll".to_url => "rock-and-roll"
"$12 worth of Ruby power".to_url => "12-dollars-worth-of-ruby-power"
"10% off if you act now".to_url => "10-percent-off-if-you-act-now"
"kick it en Français".to_url => "kick-it-en-francais"
"rock it Español style".to_url => "rock-it-espanol-style"
"tell your readers 你好".to_url => "tell-your-readers-ni-hao"
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
downcase
小文字にします。先頭または末尾のstrip
空白がないことを確認します。1 つ目gsub
は、スペースをハイフンに置き換えます。2 番目gsub
は、すべての非アルファ非ダッシュ非アンダースコア文字を削除します (このセットは非常に近いです\W
が、ダッシュも含まれていることに注意してください。そのため、ここで綴られています)。
to_slugは、ファンキーなキャラクターを含むほとんどすべてを処理する優れた Rails プラグインですが、その実装は非常にシンプルです。Stringにチャックすると、ソートされます。要約したソースは次のとおりです。
String.class_eval do
def to_slug
value = self.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n, '').to_s
value.gsub!(/[']+/, '')
value.gsub!(/\W+/, ' ')
value.strip!
value.downcase!
value.gsub!(' ', '-')
value
end
end
この宝石を使用しました。シンプルですが役に立ちます。
自称ナメクジ作成の「スイス軍ブルドーザー」、FriendlyId が好きです。https://github.com/norman/friendly_id