59

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
4

7 に答える 7

79

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

require 'active_support/inflector'

それは String 型を拡張します。

その後、次のことができます

"MyString".pluralize

戻ります

"MyStrings"

2.3.5 の場合:

require 'rubygems'
require 'active_support/inflector'

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

sudo gem install activesupport

そしてrequire。

于 2010-03-16T10:29:58.280 に答える
57

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 
于 2010-06-13T03:36:18.837 に答える
15

個人的には、Rails とはまったく関係のない言語の gemが気に入っています。

# from it's frontpage
require 'linguistics'

Linguistics.use :en

"box".en.plural #=> "boxes"
"mouse".en.plural #=> "mice"
# etc
于 2011-05-02T16:14:08.887 に答える
2

これは私にとってはうまくいきます(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"
于 2015-01-06T20:06:11.507 に答える
1
require 'active_support'
require 'active_support/inflector'

inf = ActiveSupport::Inflector::Inflections.new

インフレクターを入手するには、それをどのように使用するかわからない

于 2010-03-15T10:35:58.890 に答える
1

私の解決策:

# 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' を返すことができます。

それが役立つことを願っています。

于 2011-12-14T13:28:47.807 に答える
0

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

  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"
于 2011-02-15T17:45:24.340 に答える