2011-07-24 5 views

Respuesta

50

Agregue esto a su modelo:

include ActionView::Helpers::TextHelper 
+0

ah, muchas gracias! – jpwynn

+0

manera rápida si quiero agregarlo en todos los modelos? – coorasse

+0

@coorasse Agregalo como un modelo base del que todos sus modelos heredan. –

4

puede agregar un método como este en su modelo

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

y lo llaman de esta manera

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

Lo que sugirió ya está integrado en String, como "ruby" .pluralizar. Creo que la pregunta fue sobre el método pluralize (número, palabra) de ActionView :: Helpers :: TextHelper. –

+0

Gracias. Exactamente lo que necesitaba :) –

+0

Esta no es la misma ayuda de pluralización que utilizó en la vista. Ver la respuesta de @Sam Ruby – aceofspades

17

Mi forma favorita es crear un TextHelper en mi aplicación que proporciona estos como métodos de clase para su uso en mi modelo:

app/helpers/text_helper.rb

module TextHelper      
    extend ActionView::Helpers::TextHelper 
end          

aplicación /models/any_model.rb

def validate_something 
    ... 
    errors.add(:base, "#{TextHelper.pluralize(count, 'things')} are missing") 
end 

Incluyendo ActionView :: :: Ayudantes TextHelper en sus modelos funcionan, pero también deja en desorden su modelo con muchos métodos auxiliares 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.

56

En lugar de extender las cosas, sólo de esta manera:

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

Espero que esto ayude a alguien más!

+2

Muy útil. Este tipo de caso a menudo aparece una sola vez en un modelo o controlador. ¿Por qué agregar una nueva línea cuando se puede hacer de una vez? – sscirrus

+0

Te recomiendo que lo hagas a menos que realmente necesites ver ayudantes en todo tu modelo (que probablemente no deberías). Si solo incluyes 'ActionController :: Base.helpers' en la parte superior, es menos obvio dónde se extrae' pluralize' y causa confusión en el futuro. También se incluyen todos los demás ayudantes haciendo eso.Dudo que haya una pérdida de rendimiento allí, pero ciertamente un olor a código. –

0

Esto funcionó para mí en los carriles 5.1 (véase el segundo método, primer método 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 
Cuestiones relacionadas