Ruby on Rails - плюрализация
Есть ли помощник, чтобы избежать такого рода кода?
= @leads.length == 1 ? 'is' : 'are'
Я знаю о плюрализации, но в этом случае это не помогает. Я знаю, что писать помощника было бы тривиально, я хочу знать, есть ли что-то в Rails API, который я забыл.
Спасибо,
-Tim
Ответы
Ответ 1
Как t6d сказал, что вам нужно добавить is/to the inflector Rails. Просто код из td6, но вам нужно добавить пространство имен ActiveSupport:
ActiveSupport::Inflector.inflections do |inflection|
inflection.irregular "is", "are"
end
Теперь встроенный хелпер Rails имеет плюрализуемость, но в представлении, которое не будет делать то, что вы хотите.
Например:
pluralize(@leads.length,'is')
выходы (для 2 выводов)
2 are
Для чего вам нужно сделать свой собственный помощник, который будет плюрализовать слово, но не выводит счет. Поэтому, если вы основываете его на текущих рельсах, плюрализуйте:
def pluralize_no_count(count, singular, plural = nil)
((count == 1 || count == '1') ? singular : (plural || singular.pluralize))
end
Ответ 2
Возможно, вы могли бы использовать pluralize и добавить перегиб для 'is'
Inflector.inflections do |inflection|
inflection.irregular "is", "are"
end
так что
'is'.pluralize # => 'are'
(я не тестировал решение, но он должен работать.)
Ответ 3
Другой вариант - использовать библиотеку перевода i18n, включенную в рельсы.
Это позволяет вам определить слово или предложение (с интерполяциями) как с единственной, так и с множественной версией.
Хотя это может показаться излишним осложнением, я настоятельно рекомендую использовать i18n для каждого проекта, поскольку это не только логическое место для активных ошибок записи, но и делает ваше приложение готовым к развертыванию на другом языке довольно просто.
Он также предоставляет множество дополнительных дополнений и преимуществ с локализацией даты и времени. Читайте об i18n наизнанку здесь
Ответ 4
В заключение я пойду за:
Config
# inflections.rb
Inflector.inflections do |inflection|
inflection.irregular "is", "are"
inflection.irregular "has", "have"
end
Рельсы 3
"#{subject} #{'is'.pluralize(count)} working!"
Рельсы 2
# application_helper.rb
def signularize_or_pluralize(word, count)
if count.to_i == 1
word.singularize
else
word.pluralize
end
end
# in the view view
"#{subject} #{signularize_or_pluralize('is', count)} working!"