37

ビュー内でのみ機能するようですpluralize-私のモデルでも使用できる方法はありpluralizeますか?

4

5 に答える 5

69

拡張するのではなく、次のようにします。

ActionController::Base.helpers.pluralize(count, 'mystring')

これが他の誰かに役立つことを願っています!

于 2013-09-28T15:21:36.777 に答える
59

これをモデルに追加します。

include ActionView::Helpers::TextHelper
于 2011-07-24T12:06:20.120 に答える
17

私のお気に入りの方法は、モデルで使用するクラスメソッドとしてこれらを提供するTextHelperをアプリで作成することです。

app / helpers / text_helper.rb

module TextHelper                       
  extend ActionView::Helpers::TextHelper
end                                     

app / models / any_model.rb

def validate_something
  ...
  errors.add(:base, "#{TextHelper.pluralize(count, 'things')} are missing")
end

モデルにActionView::Helpers :: TextHelperを含めることは機能しますが、そこにある必要のない多くのヘルパーメソッドをモデルに散らかすこともできます。

また、複数化の方法がモデルのどこから来たのかについても、ほとんど明確ではありません。このメソッドはそれを明示的にします- TextHelper.pluralize

最後に、何かを複数形にしたいすべてのモデルにインクルードを追加する必要はありません。TextHelperで直接呼び出すことができます。

于 2012-12-07T15:40:13.130 に答える
4

モデルにこのようなメソッドを追加できます

  def self.pluralize(word)
    ActiveSupport::Inflector.pluralize(word)
  end

このように呼び出します

City.pluralize("ruby")
=> "rubies"
于 2011-07-24T15:44:52.980 に答える
0

これは Rails 5.1 でうまくいきました (2 番目の方法を参照してください。最初の方法はそれを呼び出しています)。

# gets a count of the users certifications, if they have any.
def certifications_count
  @certifications_count = self.certifications.count
  unless @certifications_count == 0 
    return pluralize_it(@certifications_count, "certification")
  end
end

# custom helper method to pluralize.
def pluralize_it(count, string)
  return ActionController::Base.helpers.pluralize(count, string)
end
于 2017-11-23T00:45:38.700 に答える