2013-08-03 15 views
7

Ich bin heute auf ein kleines Problem gestoßen, als ich versuchte, Bereinigung und Abschneiden in Verbindung miteinander zu verwenden, um einen Auszug für mein Blog zu erstellen. Jede der Methoden arbeitete von selbst, aber zusammen verwendet würde es nur abschneiden. Ich habe versucht, diese beiden Syntaxen (ersteres in einer Blog-Post empfohlen wird, den Titel „Six Ruby on Rails Tipps & Tricks“):Truncate + Sanitize in Rails Ansichten

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

Und dann habe ich versucht, in der Steuerung gestutzt zu setzen, und hygienisiert das Objekt in die Aussicht, aber immer noch nicht.

Endlich habe ich es wie folgt zu arbeiten:

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

Was ich weiß, warum möchte ist es nicht funktioniert, wenn ich eine Methode in einem anderen Verfahren eingewickelt? Was ist der Unterschied zu meinem letzten Versuch?

TIA 'bondibox'

Antwort

0

Kürzen und Sanitize sind in Controllern enthalten, sie sind Teil ActionView::Helpers::TextHelper und ActionView::Helpers::SanitizeHelper sind. Diese Module sind nicht standardmäßig in einem Controller enthalten, daher können Sie sie dort nicht verwenden.

Beide sind jedoch in den Ansichten (Templates) enthalten und Sie können sie daher dort verwenden. Sie können die oben genannten Module in eine Controller-Klasse aufnehmen, um sie dort zu verwenden, aber ich würde es nicht empfehlen.

Der Grund für die zweite Anweisung ist, weil Rails einige Basisobjekte aus Ruby erweitert, wie String mit mehreren methods. Sie rufen also Bereinigen auf eine abgeschnittene Version einer Zeichenfolge auf, die durch eine Methode von String abgeschnitten wird.

Die Kombination von beiden ist ein bisschen schwierig. Ich kann Ihnen nicht wirklich sagen, warum die Kombination der Modulversion von sanitize und truncate nicht ohne ein wenig mehr Info funktioniert. Was genau haben Sie hier versucht (Beispiele?)