Есть ли способ использовать плюрализацию () внутри модели, а не представления?
-
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