Есть ли способ использовать multize () внутри модели, а не в виде? - PullRequest
35 голосов
/ 24 июля 2011

Кажется, pluralize работает только в представлении - есть ли способ, которым мои модели могут использовать pluralize тоже?

Ответы [ 5 ]

62 голосов
/ 28 сентября 2013

Вместо того, чтобы расширять вещи, я просто так:

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

Надеюсь, это поможет кому-то еще!

53 голосов
/ 24 июля 2011

Добавьте это к вашей модели:

include ActionView::Helpers::TextHelper
17 голосов
/ 07 декабря 2012

Мой любимый способ - создать 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.

4 голосов
/ 24 июля 2011

Вы можете добавить такой метод в вашу модель

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

и вызывать его следующим образом

City.pluralize("ruby")
=> "rubies"
0 голосов
/ 23 ноября 2017

Это сработало для меня в 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
...