web-dev-qa-db-ja.com

Ruby NOT Railsに複数形化関数がありますか?

Railsではなく、いくつかのRubyコードを書いています。次のようなものを処理する必要があります。

found 1 match
found 2 matches

Railsをインストールしているので、スクリプトの先頭にrequire句を追加できるかもしれませんが、文字列を複数化するRubyメソッドを知っていますか?スクリプトがRailsではないがRailsがインストールされている場合、これに対処できるクラスを要求できますか?

編集:これらの答えはすべて近かったが、私はそれが機能するものをチェックした。 RailsではなくRubyのコードを書くときは、このメソッドをヘルパーとして試してください。

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

実際にあなたがする必要があるのは

require 'active_support/inflector'

そして、それは文字列型を拡張します。

それでできます

"MyString".pluralize

戻る

"MyStrings"

2.3.5の場合:

require 'rubygems'
require 'active_support/inflector'

試していない場合、それを取得する必要があります

Sudo gem install activesupport

そして次に必要です。

73
scaney

ほとんどの場合、インフレクターは過剰です。

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 
55
eukras

私は個人的に linguistics gem が好きです。これは間違いなくRails関連。

# from it's frontpage
require 'linguistics'

Linguistics.use :en

"box".en.plural #=> "boxes"
"mouse".en.plural #=> "mice"
# etc
11
hawx

これは私のために機能します(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"
2
EffectiveQA
require 'active_support'
require 'active_support/inflector'

inf = ActiveSupport::Inflector::Inflections.new

インフレクタを取得するには、どのように使用するかわからない

1
scaney

私の解決策:

# 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、 'reviews')を呼び出すと、「review」が返されます。

お役に立てば幸いです。

0
Giang Nguyen

そのためのヘルパー関数を定義しました。すべてのユーザー編集可能モデルのインデックスビューに使用します。

  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"
0
VikoAlucard