2010-08-29 9 views
8

Desidero formattare un numero in un controller prima di inserirlo in una stringa. Ma la funzione number_with_delimiter() non funziona in un controller. Ho bisogno della stringa da inviare a un plugin javascript.Come formattare un numero in un controller ruby ​​on rails, number_with_delimiter funziona solo nelle viste

Potrei eseguire il codice nella vista, ma suppongo che non sia l'opzione migliore.

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

Esiste una funzione alternativa per modificare il formato di p.price?

+0

È possibile fare riferimento alla mia risposta qui http://stackoverflow.com/questions/4467697/rails-why-the-number-with-delimiter-method-is-non-recognized-inside-my-model/25979370# 25979370 –

risposta

17

Per rispondere alla tua domanda direttamente, sono i seguenti nel controller (in genere vicino alla parte superiore, sotto la dichiarazione class):

include ActionView::Helpers::NumberHelper 

Si potrebbe anche includere questo modulo nel modello (qualunque classe p è) e quindi scrivere una funzione per restituire il prezzo formattato.

Il posto migliore per codice come questo, tuttavia, è in un helper, non nel controller. L'aiutante verrebbe chiamato dalla vista. Il controller dovrebbe essere il più corto possibile e non includere alcuna logica di visualizzazione.

+0

ok, grazie mille .. ottimo consiglio! Lo sposterò davvero su un aiutante. –

10

basta chiamare il sottostante ActiveSupport::NumberHelper metodo direttamente:

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

Questo evita compresi tutti i metodi ActionView nell'oggetto inutilmente.

1

controllori binari hanno accesso allo stesso contesto che il renderer ActionView fa utilizzando la proprietà view_context senza dover mixin più moduli vista helper:

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

Questo ha il vantaggio di avere accesso completo a tutti helper vista pure come qualsiasi configurazione speciale che potresti avere configurato (es. impostazioni i18n).

+0

Questo è migliore della risposta accettata IMO – Darwayne

Problemi correlati