Ruby posttitel naar slug

Hoe moet ik een posttitel omzetten in een slug in Ruby?

De titel kan alle tekens bevatten, maar ik wil alleen dat de slug [a-z0-9-_]toestaat (Mogen er andere tekens worden toegestaan?).

Dus eigenlijk:

  • alle letters in kleine letters
  • converteer spaties naar koppeltekens
  • externe tekens verwijderen

Antwoord 1, autoriteit 100%

Is dit Rails? (werkt in Sinatra)

string.parameterize

Dat is het. Voor nog meer verfijnde slugging, zie ActsAsUrl. Het kan het volgende doen:

"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"

Antwoord 2, autoriteit 85%

slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')

downcasemaakt het kleine letters. De stripzorgt ervoor dat er geen voor- of achterliggende witruimte is. De eerste gsubvervangt spaties door koppeltekens. De tweede gsubverwijdert alle niet-alfa-niet-streepjes en niet-onderstrepingstekens (merk op dat deze set heel dicht bij \Wligt maar ook het streepje bevat, daarom het staat hier beschreven).


Antwoord 3, autoriteit 7%

to_slugis een geweldige Rails-plug-in die vrijwel alles aankan, inclusief funky karakters, maar de implementatie ervan is erg makkelijk. Gooi het op Stringen je bent gesorteerd. Hier is de bron samengevat:

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

Antwoord 4, autoriteit 3%

Ik heb dit juweeltje gebruikt. Het is eenvoudig maar nuttig.

https://rubygems.org/gems/string_helpers


Antwoord 5

Ik hou van FriendlyId, de zelfverklaarde “Swiss Army Bulldozer” van het maken van slakken. https://github.com/norman/friendly_id

Other episodes