web-dev-qa-db-ja.com

ビューではなくモデル内でpluralize()を使用する方法はありますか?

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

36
jpw

物事を拡張するのではなく、私はこのようにしています:

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

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

65
Tom Rossi

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

include ActionView::Helpers::TextHelper
54
Sam Ruby

私のお気に入りの方法は、モデルで使用するクラスメソッドとしてこれらを提供する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で直接呼び出すことができます。

17
Edward Anderson

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

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

このように呼びます

City.pluralize("Ruby")
=> "rubies"
4
Mattia Lipreri

これは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
0