Кажется, pluralize
работает только в представлении - есть ли способ, которым мои модели тоже могут использовать pluralize
?
Есть ли способ использовать multize() внутри модели, а не в виде?
Ответ 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