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.
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 ...
@ 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:
Danke Vitork für den ersten Code!
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%Damit dies mit der neuesten Version (Rails 4.x, friendly_id 5.x) funktioniert, sind folgende Schritte zu beachten:
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.
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 .
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
erhaltenVerwendung in Ansichten:
%Vor%Tags und Links ruby-on-rails acts-as-taggable-on