2010-10-27 11 views
16

Nel mio controller, sto costruendo un oggetto JSON per i libri. Voglio mostrare truncate(book.content, 250).Rails 3 - Troncare in un controller?

Questo non funziona in un controller di rotaie. E visto che è un rendering JSON, non uso una vista. Quindi come si tronca? Non voglio che il mio oggetto JSON sia enorme :)!

Grazie.

+0

molto confuso. Voglio costruire un oggetto JSON con un campo di testo ma solo mostrare 250 caratteri ... Quindi ho bisogno di troncare. Ma Rails non ti lascia troncare in una vista o in un modello, quindi dove posso creare l'oggetto JSON? – TheExit

risposta

35

È possibile utilizzare molti modi per ottenere ciò. Il più conveniente sarebbe quello di includere solo l'helper corretto nel controller. In questo sarebbe:

class BooksController < ApplicationController 
    include ActionView::Helpers::TextHelper 
    ... 
end 

alternativa si può anche creare un parziale che genera il codice necessario, per esempio _truncate.html.erb con codice appropriato:

<%= truncate (@book, :length => 250) %> 

E poi renderlo in il tuo punto di vista:

result = render_to_string :partial => 'truncate' 

Spero che questo aiuti.

+0

Grazie, stavo facendo troncare (@book, 200) e questo era un errore ... Quando ho usato il: lunghezza funzionava? Strano .. Non hai bisogno di lunghezze in vista .. – TheExit

+1

truncate (@book, 200) la sintassi è deprecata da qualche tempo e il modo corretto di usare truncate è di passare hash delle opzioni dopo l'oggetto. Non sono sicuro, perché il metodo deprecato ha funzionato nelle viste e non nel controller, ma dovresti limitarti alla nuova sintassi. :-) – mdrozdziel

26

È possibile chiamare semplicemente il metodo di stringa dei binari troncati.

http://apidock.com/rails/String/truncate

"Once upon a time in a world far far away".truncate(27) 

@book.content.truncate(250) 

Non sicuro al 100% se si deve includere

include ActionView::Helpers::TextHelper 
+2

per me questa è una risposta migliore – FireDragon

+0

Questa è una risposta migliore perché non devi includere l'helper. Il valore predefinito è '...', ma può passare l'omissione: 'xxx' come opzione. – hellion

Problemi correlati