instance method parameterize

Ruby on Rails edge

Available in: v2.2.3 v2.3.18 v3.0.20 v3.1.12 v3.2.22.5 v4.0.13 v4.1.16 v4.2.11.3 v5.0.7.2 v5.1.7 v5.2.8.1 v6.0.6.1 v6.1.7.10 v7.0.10 v7.1.6 v7.2.4 v8.0.5.1 v8.1.4 edge

Signature

parameterize(string, separator: "-", preserve_case: false, locale: nil)

Replaces special characters in a string so that it may be used as part of a ‘pretty’ URL.

“‘ parameterize(“Donald E. Knuth”) # => “donald-e-knuth” parameterize(“^très|Jolie– ”) # => “tres-jolie” “`

To use a custom separator, override the separator argument.

“‘ parameterize(“Donald E. Knuth”, separator: ’_’) # => “donald_e_knuth” parameterize(“^très|Jolie__ ”, separator: ‘_’) # => “tres_jolie” “‘

To remove the unwanted characters instead of replacing them, pass an empty separator. nil is treated the same way.

“‘ parameterize(“Donald E. Knuth”, separator: ”) # => “donaldeknuth” “`

To preserve the case of the characters in a string, use the preserve_case argument.

“‘ parameterize(“Donald E. Knuth”, preserve_case: true) # => “Donald-E-Knuth” parameterize(“^très|Jolie– ”, preserve_case: true) # => “tres-Jolie” “`

It preserves dashes and underscores unless they are used as separators:

“‘ parameterize(“^très|Jolie__ ”) # => “tres-jolie__” parameterize(“^très|Jolie– ”, separator: “_”) # => “tres_jolie–” parameterize(“^très_Jolie– ”, separator: “.”) # => “tres_jolie–” “`

If the optional parameter locale is specified, the word will be parameterized as a word of that language. By default, this parameter is set to nil and it will use the configured I18n.locale.

Parameters

string req
separator key = "-"
preserve_case key = false
locale key = nil
Source
# File activesupport/lib/active_support/inflector/transliterate.rb, line 149
    def parameterize(string, separator: "-", preserve_case: false, locale: nil)
      separator ||= ""

      # Replace accented chars with their ASCII equivalents.
      parameterized_string = transliterate(string, locale: locale)

      # Turn unwanted chars into the separator. tr_s! does it in place, squeezing each
      # run into one separator, without a MatchData and a replacement String per run;
      # match? spares it building its table when there is nothing to replace. tr_s!
      # leaves chars above U+00FF untouched, which a custom transliteration rule can
      # return, hence the regexp for those strings.
      if separator.length == 1 && separator.ascii_only? && parameterized_string.ascii_only?
        parameterized_string.tr_s!("^a-zA-Z0-9\\-_", separator) unless parameterized_string.match?(/\A[a-z0-9\-_]*\z/i)
      else
        parameterized_string.gsub!(/[^a-z0-9\-_]+/i, separator)
      end

      unless separator.empty?
        # No more than one of the separator in a row.
        if separator.length == 1
          parameterized_string.squeeze!(separator)
        else
          re_sep = Regexp.escape(separator)
          parameterized_string.gsub!(/#{re_sep}{2,}/, separator)
        end
        # Remove leading/trailing separator.
        parameterized_string.delete_prefix!(separator)
        parameterized_string.delete_suffix!(separator)
      end

      parameterized_string.downcase! unless preserve_case
      parameterized_string
    end

Defined in activesupport/lib/active_support/inflector/transliterate.rb line 149 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActiveSupport::Inflector

Type at least 2 characters to search.

Use the arrow keys to navigate results, Enter to open one, Escape to close.

Keyboard shortcuts

/
Focus search
⌘K / Ctrl-K
Command palette
?
This help
Esc
Close