Erstellen von URL-Slugs für Tags mit acts_as_taggable_on

8

Ich möchte URL-Slugs für Tags erstellen, die vom Edelstein acts_as_tagable_on verwaltet werden. Zum Beispiel möchte ich anstelle von URLs wie Ссылка Ссылка (wobei" mein Tag "der eindeutige Name des Tags ist).

In Modellen, die ich selbst erstelle, tue ich dies in der Regel, indem ich die to_param-Methode des Modells überschreibe und ein "slug" -Feld im Modell erstelle, um das Ergebnis der neuen to_param-Methode zu speichern. Ich habe versucht, dies mit dem Tag-Modell von ActsAsTaggableOn zu tun, aber es funktioniert nicht.

Ich kann sonst Dinge in der tag.rb-Klasse von ActsAsTaggableOn wie folgt überschreiben:

%Vor%

Wenn ich jedoch versuche, die to_param-Methode in demselben Block mit einer Methodendefinition wie:

zu überschreiben %Vor%

Rails erzeugt und antwortet weiterhin auf Routen mit ganzzahligen IDs anstelle des parametrisierten Namens. In der Tat in der Konsole, wenn ich etwas wie

versuche %Vor%

Die Ganzzahl-ID wird zurückgegeben und nicht das Ergebnis der überschriebenen to_param-Methode.

Ich würde den Edelstein lieber nicht abzweigen und anpassen, wenn es irgendeinen Weg gibt, den ich mit meinem eigenen Anwendungscode machen kann. Danke.

    
Jamie Forrest 13.02.2011, 05:21
quelle

5 Antworten

13

Ich benutze den Friendly_id ( Ссылка ) Edelstein, um Schnecken zu verwalten. Meine Methode, Slugs für meine Tags zu erstellen, ist ähnlich wie deine, aber etwas einfacher.

Ich habe gerade den Initialisierer act_as_taggable_on.rb mit dem folgenden Code erstellt:

%Vor%

Und dann:

%Vor%

Und voilá:

%Vor%

Hoffe diese Hilfe ...

    
Vitor Arimitsu 13.05.2011, 10:01
quelle
14

@ vitorks Code ist ein guter Start, funktioniert aber nicht für neuere Versionen von friendly_id und acts_as_taggable. Hier ist ein aktualisierter Initialisierer:

%Vor%

Meine db-Spalte heißt permalink . Sie können slugged verwenden, wenn Sie dies bevorzugen. Übrigens verwende ich Folgendes:

  • friendly_id (4.0.5)
  • agiert als Taggable-on (2.2.2)

Danke Vitork für den ersten Code!

    
johnkoht 14.05.2012 16:33
quelle
9

Tatsächlich ist die Antwort viel einfacher und Sie müssen nicht friendly_id oder eine andere unnötige Erweiterung verwenden.

sonfig / initializers / act_as_taggable_on.rb

%Vor%

Fügen Sie bei Bedarf eine Slug-Spalte hinzu, andernfalls überspringen Sie den Aufruf vor dem Rückruf.

Dann in der Ansicht, anstatt wie

zu iterieren %Vor%

Sie werden so iterieren

%Vor%

weil tag_list nur Strings liefert, während Sie mit Tags echte Tags haben. Und zumindest in der Steuerung

%Vor%     
valachi 19.10.2012 11:32
quelle
7

Damit dies mit der neuesten Version (Rails 4.x, friendly_id 5.x) funktioniert, sind folgende Schritte zu beachten:

Erstellen Sie die Migration, um die Tabelle slug to tags

hinzuzufügen %Vor%

Sie können die: slug-Spalte umbenennen - Sie sollten den Spaltennamen im Initialisierer angeben, wenn Sie ihn ändern. Vergessen Sie nicht, die Migration rake db:migrate auszuführen.

Erstellen Sie einen Initialisierer für ActsAsTaggableOn

%Vor%

Wenn Sie nach Tags suchen, müssen Sie ActsAsTaggableOn::Tag.friendly.find 'tag-name' verwenden oder :finders zu friendly_id hinzufügen: Verwenden Sie den Aufruf, um find direkt im Modell zu verwenden. Weitere Informationen finden Sie in guidelite_id-Anleitungen .

    
Lenart 13.04.2014 08:21
quelle
0

Es gibt einen anderen Weg.

Erstellen Sie einen Controller für die Tags mit einer Aktion:

%Vor%

In routes.rb ändern Sie die generierte Route zu:

%Vor%

Fügen Sie in tags_controller.rb diesen Code hinzu:

%Vor%

wobei Entry ein Modellname ist.

Jetzt können Sie alle Einträge mit netten URLs wie example.com/tags/animals

erhalten

Verwendung in Ansichten:

%Vor%     
user1201917 10.11.2016 14:25
quelle