2013-08-03 15 views
7

Wpadłem dziś na mały problem, gdy próbowałem użyć środków dezynfekujących i obcinać w połączeniu ze sobą, aby utworzyć fragment mojego bloga. Każda z metod działała sama, ale użyto jej razem tylko by ją skróciła. Próbowałem obu tych składni (dawna jest zalecany w blogu zatytułowanym „Six Ruby on Rails Porady & Sztuczki”):Przycinanie + sanityzacja widoków w szynach

<%= truncate(sanitize(post.content), length: 580) %> 
<%= sanitize(truncate(post.content, length: 580, separator: '<p>')) %> 

a potem starał się obciąć w kontrolerze i odkażane tego obiektu w widok, ale wciąż nie.

Wreszcie dostałem go do pracy tak:

<%= sanitize(post.content.truncate(580, separator: '</p>')) %> 

Co chciałbym wiedzieć, dlaczego nie działać kiedy owinięte metodę w inny sposób? Jaka jest różnica w porównaniu z ostatnią próbą?

TIA 'bondibox'

Odpowiedz

0

Obetnij i zdezynfekować nie są wliczone w sterownikach, są one częścią ActionView::Helpers::TextHelper i ActionView::Helpers::SanitizeHelper odpowiednio. Moduły te nie są zawarte domyślnie w kontrolerze, więc nie można z niego korzystać.

Obie są jednak uwzględnione w widokach (szablonach) i dlatego można z nich korzystać. Możesz dołączyć moduły wymienione powyżej w klasie kontrolera, aby móc z nich korzystać, ale nie poleciłbym tego.

Powód, dla którego działa druga instrukcja, polega na tym, że Railsy rozszerzają niektóre podstawowe obiekty z Ruby, takie jak String z kilkoma methods. więc wywołujesz dezynfekcję w obciętej wersji ciągu obciętego metodą String.

Połączenie obu jest nieco trudne. Nie mogę powiedzieć, dlaczego połączenie wersji modułu sanitize i truncate nie działa bez trochę więcej informacji. Co dokładnie próbowałeś osiągnąć tutaj (przykłady?)