2010-10-27 12 views
16

W moim kontrolerze buduję obiekt json dla książek. Chcę pokazać truncate(book.content, 250).Szyny 3 - Obcięcie w kontrolerze?

To nie działa w kontrolerze szyn. A biorąc pod uwagę renderowanie JSON, nie używam widoku. Więc w jaki sposób można uciąć? Nie chcę aby mój obiekt JSON był ogromny :)!

Dzięki.

+0

bardzo mylące. Chcę zbudować obiekt JSON z polem tekstowym, ale pokazuję tylko 250 znaków ... Muszę więc obciąć. Ale Railsy nie pozwalają ci obciąć w widoku lub modelu, więc gdzie mogę zbudować obiekt JSON? – TheExit

Odpowiedz

35

Możesz użyć wielu sposobów, aby to osiągnąć. Najprościej byłoby po prostu włączyć odpowiedniego kontrolera do kontrolera. W tym byłoby:

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

Alternatywnie można również tworzyć częściowy, który generuje kod co potrzeba, na przykład _truncate.html.erb z właściwego kodu:

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

A potem uczynić go Twój widok:

result = render_to_string :partial => 'truncate' 

Nadzieja to pomaga.

+0

Dzięki, robiłam skrócone (@book, 200) i to było błąd ... Kiedy użyłem: długość to działało? Dziwne .. Nie potrzebujesz długości w widokach .. – TheExit

+1

Składnia skrócona (@book, 200) jest już od jakiegoś czasu uznawana za przestarzałą, a właściwym sposobem użycia skrótu jest przekazanie opcji mieszania po obiekcie. Nie jestem pewien, dlaczego wycofana metoda działała w widokach, a nie w kontrolerze, ale powinieneś po prostu trzymać się nowej składni. :-) – mdrozdziel

26

Możesz po prostu wywołać metodę łańcuchów obcinanych.

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

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

@book.content.truncate(250) 

Nie 100% pewien, czy masz na to

include ActionView::Helpers::TextHelper 
+2

mi to jest lepsza odpowiedź – FireDragon

+0

To jest lepsza odpowiedź, ponieważ nie musisz dołączać pomocnika. Domyślnie jest to "...", ale można pominąć: "xxx" jako opcja. – hellion