55

Rubyで投稿タイトルをスラッグに変換するにはどうすればよいですか?

タイトルには任意の文字を使用できますが、スラッグのみを許可する[a-z0-9-_]必要があります (他の文字を許可する必要がありますか?)。

だから基本的に:

  • すべての文字を小文字にする
  • スペースをハイフンに変換する
  • 余分な文字を削除する
4

5 に答える 5

102

これはレールですか?(シナトラで動作します)

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"
于 2010-11-29T23:47:35.780 に答える
87
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')

downcase小文字にします。先頭または末尾のstrip空白がないことを確認します。1 つ目gsubは、スペースをハイフンに置き換えます。2 番目gsubは、すべての非アルファ非ダッシュ非アンダースコア文字を削除します (このセットは非常に近いです\Wが、ダッシュも含まれていることに注意してください。そのため、ここで綴られています)。

于 2010-11-29T21:44:08.490 に答える
7

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
于 2010-11-29T21:45:45.590 に答える
3

この宝石を使用しました。シンプルですが役に立ちます。

https://rubygems.org/gems/string_helpers

于 2012-10-19T00:49:20.813 に答える
0

自称ナメクジ作成の「スイス軍ブルドーザー」、FriendlyId が好きです。https://github.com/norman/friendly_id

于 2010-11-29T23:17:24.033 に答える