pluralize
はビュー内でのみ機能するようです-私のモデルがpluralize
も使用できる方法はありますか?
物事を拡張するのではなく、私はこのようにしています:
ActionController::Base.helpers.pluralize(count, 'mystring')
これが他の誰かに役立つことを願っています!
これをモデルに追加します。
include ActionView::Helpers::TextHelper
私のお気に入りの方法は、モデルで使用するクラスメソッドとしてこれらを提供する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で直接呼び出すことができます。
モデルにこのようなメソッドを追加できます
def self.pluralize(Word)
ActiveSupport::Inflector.pluralize(Word)
end
このように呼びます
City.pluralize("Ruby")
=> "rubies"
これは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