instance method
to_sentence
Ruby on Rails edge
Since v3.0.20Signature
to_sentence(options = {})
Converts the array to a comma-separated sentence where the last element is
joined by the connector word.
You can pass the following options to change the default behavior. If you
pass an option key that doesn't exist in the list below, it will raise an
`ArgumentError`.
#### Options
* `:words_connector` - The sign or word used to join all but the last
element in arrays with three or more elements (default: `", "`).
* `:last_word_connector` - The sign or word used to join the last element
in arrays with three or more elements (default: `", and "`).
* `:two_words_connector` - The sign or word used to join the elements
in arrays with two elements (default: `" and "`).
* `:locale` - If `i18n` is available, you can set a locale and use
the connector options defined on the 'support.array' namespace in the
corresponding dictionary file.
#### Examples
```
[].to_sentence # => ""
['one'].to_sentence # => "one"
['one', 'two'].to_sentence # => "one and two"
['one', 'two', 'three'].to_sentence # => "one, two, and three"
['one', 'two'].to_sentence(passing: 'invalid option')
# => ArgumentError: Unknown key: :passing. Valid keys are: :words_connector, :two_words_connector, :last_word_connector, :locale
['one', 'two'].to_sentence(two_words_connector: '-')
# => "one-two"
['one', 'two', 'three'].to_sentence(words_connector: ' or ', last_word_connector: ' or at least ')
# => "one or two or at least three"
```
Using `:locale` option:
```
# Given this locale dictionary:
#
# es:
# support:
# array:
# words_connector: " o "
# two_words_connector: " y "
# last_word_connector: " o al menos "
['uno', 'dos'].to_sentence(locale: :es)
# => "uno y dos"
['uno', 'dos', 'tres'].to_sentence(locale: :es)
# => "uno o dos o al menos tres"
```
: (?Hash[untyped, untyped]) -> String
Parameters
-
optionsopt = {}
Source
# File activesupport/lib/active_support/core_ext/array/conversions.rb, line 65
def to_sentence(options = {})
options.assert_valid_keys(:words_connector, :two_words_connector, :last_word_connector, :locale)
default_connectors = {
words_connector: ", ",
two_words_connector: " and ",
last_word_connector: ", and "
}
if options[:locale] != false && defined?(I18n)
i18n_connectors = I18n.translate(:'support.array', locale: options[:locale], default: {})
default_connectors.merge!(i18n_connectors)
end
options = default_connectors.merge!(options)
case length
when 0
+""
when 1
+"#{self[0]}"
when 2
+"#{self[0]}#{options[:two_words_connector]}#{self[1]}"
else
+"#{self[0...-1].join(options[:words_connector])}#{options[:last_word_connector]}#{self[-1]}"
end
end
Defined in activesupport/lib/active_support/core_ext/array/conversions.rb line 65
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in Array