Есть ли в Ruby NOT Rails функция множественного числа? - PullRequest
51 голосов
/ 15 марта 2010

Я пишу код на Ruby, а не Rails, и мне нужно обработать что-то вроде этого:

found 1 match
found 2 matches

У меня установлен Rails, поэтому, возможно, я смогу добавить предложение require в верхней части скрипта, но кто-нибудь знает метод RUBY, который множит строки? Есть ли класс, который мне может потребоваться, чтобы справиться с этим, если скрипт не Rails, но у меня установлен Rails?

Редактировать: Все эти ответы были близки, но я выбрал тот, который заставил его работать на меня. Попробуйте этот метод в качестве помощника при написании Ruby, а не Rails, код:

def pluralize(number, text)
  return text.pluralize if number != 1
  text
end

Ответы [ 7 ]

71 голосов
/ 16 марта 2010

На самом деле все, что вам нужно сделать, это

require 'active_support/inflector'

и это расширит тип String.

затем вы можете сделать

"MyString".pluralize

который вернет

"MyStrings"

для 2.3.5 попробовать:

require 'rubygems'
require 'active_support/inflector'

должен получить его, если не попробовать

sudo gem install activesupport

и затем требуется.

55 голосов
/ 13 июня 2010

Inflector является избыточным для большинства ситуаций.

def x(n, singular, plural=nil)
    if n == 1
        "1 #{singular}"
    elsif plural
        "#{n} #{plural}"
    else
        "#{n} #{singular}s"
    end
end

Поместите это в common.rb, или где вам нравятся ваши общие служебные функции и ...

require "common" 

puts x(0, 'result') # 0 results
puts x(1, 'result') # 1 result
puts x(2, 'result') # 2 results

puts x(0, 'match', 'matches') # 0 matches
puts x(1, 'match', 'matches') # 1 match 
puts x(2, 'match', 'matches') # 2 matches 
11 голосов
/ 02 мая 2011

Мне лично нравится лингвистический камень , который определенно не связан с рельсами.

# from it's frontpage
require 'linguistics'

Linguistics.use :en

"box".en.plural #=> "boxes"
"mouse".en.plural #=> "mice"
# etc
2 голосов
/ 06 января 2015

Это работает для меня (используя ruby ​​2.1.1 и actionpack 3.2.17):

~$ irb
>> require 'action_view'
=> true
>> include ActionView::Helpers::TextHelper
=> Object
>> pluralize(1, 'cat')
=> "1 cat"
>> pluralize(2, 'cat')
=> "2 cats"
1 голос
/ 15 марта 2010
require 'active_support'
require 'active_support/inflector'

inf = ActiveSupport::Inflector::Inflections.new

чтобы получить инфлектор, не уверен, как вы его используете

0 голосов
/ 14 декабря 2011

мое решение:

# Custom pluralize - will return text without the number as the default pluralize.
def cpluralize(number, text)
  return text.pluralize if number != 1 
  return text.singularize if number == 1
end

Таким образом, вы можете получить «обзор», если позвоните cpluralize (1, «обзоры»)

Надеюсь, это поможет.

0 голосов
/ 15 февраля 2011

Для этого я определил вспомогательную функцию, я использую ее для представления индекса каждой редактируемой модели:

  def ovyka_counter(array, name=nil, plural=nil)
    name ||= array.first.class.human_name.downcase
    pluralize(array.count, name, plural)
  end

тогда можно позвонить из вида:

<% ovyka_counter @posts %>

для интернационализации (i18n), вы можете добавить это к своим языковым YAML-файлам:

  activerecord:
    models:
      post: "Conversation"
...