web-dev-qa-db-ja.com

Rubyスラッグに投稿タイトル

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

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

だから基本的に:

  • すべての文字を小文字にする
  • スペースをハイフンに変換する
  • 不要な文字を削除する
48
ma11hew28
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')

downcaseは小文字にします。 stripは、先頭または末尾に空白がないことを確認します。最初のgsubは、スペースをハイフンに置き換えます。 2番目のgsubは、非英字、非ダッシュ、下線以外のすべての文字を削除します(このセットは\Wに非常に近いが、ダッシュも含まれているため、ここに表記されているので注意してください)。

78
Ben Lee

これはRailsですか?

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"
94
Mark Thomas

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
7
Jamie Rumbelow

私はこの宝石を使用しました。シンプルですが便利です。

https://rubygems.org/gems/string_helpers

3
Diego Montadori

私は、スラグを作成することを自称した「スイス軍ブルドーザー」であるFriendlyIdが好きです。 https://github.com/norman/friendly_id

0
Aaron Sumner