ruby-on-rails pluralize

ruby on rails - rails 3: ¿hay alguna manera de usar pluralize() dentro de un modelo? Parece que solo funciona en una vista



ruby-on-rails (5)

Parece que pluralize() solo funciona dentro de una vista. ¿Hay alguna forma en que mis modelos puedan usar pluralize() también?

(Tengo métodos en mi modelo que devuelven cadenas de mensajes para usuarios que no acceden a una vista, por ejemplo, mensajes enviados por mensaje de texto SMS).


Agregue esto a su modelo:

include ActionView::Helpers::TextHelper


En lugar de extender las cosas, simplemente me gusta esto:

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

¡Espero que esto ayude a alguien más!


Esto funcionó para mí en rails 5.1 (ver el segundo método, el primer método lo está llamando).

# 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


Mi forma favorita es crear un TextHelper en mi aplicación que los proporcione como métodos de clase para usar en mi modelo:

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

La inclusión de ActionView :: Helpers :: TextHelper en los trabajos de su modelo, pero también deja en desorden su modelo con muchos métodos de ayuda que no necesitan estar allí.

Tampoco está tan claro de dónde vino el método de pluralización en su modelo. Este método lo hace explícito - TextHelper.pluralize .

Finalmente, no tendrá que agregar una inclusión a cada modelo que quiera pluralizar algo; solo puede llamarlo directamente en TextHelper.


Puede agregar un método como este en su modelo

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

y llámalo de esta manera

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