2010-10-27 16 views
16

En mi controlador, estoy construyendo un objeto json para libros. Quiero mostrar truncate(book.content, 250).Rieles 3: ¿truncar en un controlador?

Esto no funciona en un controlador de rieles. Y dado que es un render JSON, no uso una vista. Entonces, ¿cómo se trunca? No quiero que mi objeto JSON sea enorme :)!

Gracias.

+0

muy confuso. Quiero construir un objeto JSON con un campo de texto, pero solo mostrar 250 caracteres ... Así que tengo que truncar. Pero Rails no le permite truncar en una Vista o Modelo, entonces, ¿dónde construyo el objeto JSON? – TheExit

Respuesta

35

Puede usar muchas formas para lograr esto. El más convincente sería simplemente incluir el asistente adecuado en el controlador. En este sería:

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

Como alternativa, también puede crear un parcial que genera el código que necesita, por ejemplo _truncate.html.erb con código apropiado:

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

Y luego lo mostraremos en su opinión:

result = render_to_string :partial => 'truncate' 

Espero que esto ayude.

+0

Gracias, estaba haciendo truncar (@book, 200) y eso fue un error ... Cuando usé el: ¿longitud funcionó? Extraño ... NO necesitas longitud en las vistas ... – TheExit

+1

truncate (@book, 200) la sintaxis está obsoleta desde hace un tiempo, y la forma correcta de usar truncar es pasar hash de opciones después del objeto. No estoy seguro de por qué el método obsoleto funcionó en las vistas y no en el controlador, pero debería apegarse a la nueva sintaxis. :-) – mdrozdziel

26

Puede llamar al método de cadena de rieles truncados.

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

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

@book.content.truncate(250) 

No es 100% seguro de si tiene que incluir

include ActionView::Helpers::TextHelper 
+2

para mí esta es una respuesta mejor – FireDragon

+0

Esta es una mejor respuesta porque no tiene que incluir el ayudante. Se predetermina a '...', pero puede pasar omisión: 'xxx' como una opción. – hellion

Cuestiones relacionadas