rails 3: Есть ли способ использовать pluralize() внутри модели? Кажется, работает только в представлении
Похоже, что pluralize()
работает только в пределах представления - есть ли какой-то способ, которым мои модели могут использовать pluralize()
тоже?
(в моей модели есть методы, возвращающие строки сообщений для пользователей, которые не переходят в представление - например, сообщения, отправленные через SMS-сообщение.)
5 ответов:
Вместо того, чтобы расширять вещи, я просто это так:
ActionController::Base.helpers.pluralize(count, 'mystring')
Надеюсь, это поможет кому-то еще!
Мой любимый способ-создать TextHelper в моем приложении, который предоставляет эти методы класса для использования в моей модели:
Приложение / помощники / 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 в ваши модели работает, но вы также засоряете свою модель множеством вспомогательных методов, которые не должны быть там.
Также не совсем ясно, откуда в вашей модели появился метод pluralize. Этот метод делает его явным -
TextHelper.pluralize
.Наконец, вам не нужно будет добавлять include к каждой модели, которая хочет что-то плюрализовать; вы можете просто вызвать его непосредственно на 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