Ruby post title to slug

后端 未结 5 1131
轮回少年
轮回少年 2020-12-23 19:21

How should I convert a post title to a slug in Ruby?

The title can have any characters, but I only want the slug to allow [a-z0-9-_] (Should it allow an

相关标签:
5条回答
  • 2020-12-23 20:05

    I like FriendlyId, the self-professed "Swiss Army Bulldozer" of creating slugs. https://github.com/norman/friendly_id

    0 讨论(0)
  • 2020-12-23 20:13

    to_slug is a great Rails plugin that handles pretty much everything, including funky characters, but its implementation is very simple. Chuck it onto String and you'll be sorted. Here's the source condensed down:

    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
    
    0 讨论(0)
  • 2020-12-23 20:21
    slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
    

    downcase makes it lowercase. The strip makes sure there is no leading or trailing whitespace. The first gsub replaces spaces with hyphens. The second gsub removes all non-alpha non-dash non-underscore characters (note that this set is very close to \W but includes the dash as well, which is why it's spelled out here).

    0 讨论(0)
  • 2020-12-23 20:25

    Is this Rails? (works in Sinatra)

    string.parameterize
    

    That's it. For even more sophisticated slugging, see ActsAsUrl. It can do the following:

    "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"
    
    0 讨论(0)
  • 2020-12-23 20:26

    I've used this gem.It's simple but helpful.

    https://rubygems.org/gems/string_helpers

    0 讨论(0)
提交回复
热议问题