2010-08-29 14 views
8

Me gustaría formatear un número en un controlador antes de insertarlo en una cadena. Pero la función number_with_delimiter() no funciona en un controlador. Necesito la cadena para enviar a un complemento de JavaScript.Cómo formatear un número en un controlador ruby ​​on rails, number_with_delimiter solo funciona en las vistas

Podría ejecutar el código en la vista, pero supongo que esa no es la mejor opción.

@mycarousel_itemList = @mycarousel_itemList + "{url: '" + p.photo.url(:thumb) + 
"', price: '" + p.price.to_s + " €'}," 

¿Existe una función alternativa para cambiar el formato de p.price?

+0

Puedes consultar mi respuesta aquí http://stackoverflow.com/questions/4467697/rails-why-the-number-with-delimiter-method-is-not-recognized-inside-my-model/25979370# 25979370 –

Respuesta

17

Para responder a su pregunta directamente, incluyen lo siguiente en el controlador (por lo general en la parte superior, debajo de la declaración class):

include ActionView::Helpers::NumberHelper 

Usted podría también incluir este módulo en el modelo (cualquiera que sea la clase p es) y luego escribe una función para devolver el precio formateado.

El mejor lugar para código como este, sin embargo, es en un helper, no en el controlador. El ayudante sería llamado desde la vista. Su controlador debe ser lo más corto posible y no incluir ninguna lógica de vista en absoluto.

+0

bien, muchas gracias ... buenos consejos! De hecho, lo moveré a un ayudante. –

10

Sólo tiene que llamar al método ActiveSupport::NumberHelper subyace directamente:

> ActiveSupport::NumberHelper.number_to_delimited(100000) 
=> "100,000" 

Esto evita que incluye todos los métodos ActionView en su objeto innecesariamente.

1

controladores Rieles tienen acceso al mismo contexto que el procesador de ActionView hace uso de la propiedad view_context sin tener que mixin múltiples módulos ayudante de vista:

class BaseController < ApplicationController                          
    def index 
    # Accessing view the context 
    logger.info view_context.number_to_currency(34) 
    end 
end 

Esto tiene la ventaja de tener acceso completo a todos los ayudantes de vista, así como cualquier configuración especial que pueda haber configurado (es decir, configuraciones i18n).

+0

Esto es mejor que la respuesta aceptada IMO – Darwayne

Cuestiones relacionadas