Есть ли способ использовать multize() внутри модели, а не в виде?

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

Ответ 1

Добавьте это в свою модель:

include ActionView::Helpers::TextHelper

Ответ 2

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

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

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

Ответ 3

Мой любимый способ - создать TextHelper в моем приложении, который предоставляет их как методы класса для использования в моей модели:

приложение/хелперы/text_helper.rb

module TextHelper                       
  extend ActionView::Helpers::TextHelper
end                                     

приложение/модели /any_model.rb

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

В том числе ActionView :: Helpers :: TextHelper в ваших моделях работает, но вы также засоряете свою модель множеством вспомогательных методов, которые не обязательно должны быть там.

Это также не так ясно, где метод плюрализации появился в вашей модели. Этот метод делает его явным - TextHelper.pluralize.

Наконец, вам не нужно добавлять include для каждой модели, которая хочет что-то плюрализовать; вы можете просто вызвать его непосредственно в TextHelper.

Ответ 4

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

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

и назовите его таким образом

City.pluralize("ruby")
=> "rubies"

Ответ 5

Это работало для меня в рельсах 5.1 (см. Второй метод, первый метод вызывает его).

# 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