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

StackOverflow https://stackoverflow.com/questions/6806473

  •  25-10-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

include ActionView::Helpers::TextHelper

Другие советы

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

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

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

Мой любимый способ - создать 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top