2013-08-03 12 views
7

Ho avuto un piccolo problema oggi mentre stavo cercando di usare sanitize e troncare insieme l'un l'altro per creare un estratto per il mio blog. Ciascuno dei metodi ha funzionato da solo, ma usato insieme avrebbe solo troncato. Ho provato entrambe le sintassi (il primo è consigliato in un post dal titolo "Sei Ruby on Rails Consigli & Tricks"):Truncate + Sanitize in Rails Views

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

E poi ho provato a mettere troncare nel controller, e Sanitized quell'oggetto in la vista, ma ancora no.

Alla fine ho preso a lavorare in questo modo:

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

Quello che mi piacerebbe sapere è il motivo per cui non ha funzionato quando ho avvolto un metodo in un altro metodo? Qual è la differenza con l'ultimo modo in cui l'ho provato?

TIA 'bondibox'

risposta

0

Tronca e disinfettare non sono inclusi nel controller, fanno parte di, rispettivamente, ActionView::Helpers::TextHelper e ActionView::Helpers::SanitizeHelper. Questi moduli non sono inclusi per impostazione predefinita in un controller, quindi non è possibile utilizzarlo lì.

Tuttavia, entrambi sono inclusi nelle viste (modelli) e pertanto è possibile utilizzarli li. È possibile includere i moduli sopra indicati in una classe controller per utilizzarli lì, ma non lo consiglierei.

Il motivo per cui la seconda istruzione funziona è perché Rails estende alcuni oggetti di base da Ruby, come String con diversi methods. quindi in realtà si chiama sanitize su una versione troncata di una stringa troncata da un metodo di String.

La combinazione di entrambi è un po 'complicata. Non posso davvero dirti perché la combinazione della versione del modulo di sanitize e truncate non funziona senza un po 'più di informazioni. Che cosa hai cercato di fare esattamente qui (esempi?)