2017-01-16 9 views
1

Ich habe ein ActivityType-Modell, das nach dem Erstellen eine dynamische Seite erstellt, wobei ein Slug dem ActivityType-Slug entspricht.FriendlyID - Zuweisen eines Slugs vor dem Speichern

Wenn eine Seite mit diesem Slug bereits existiert, wird ein Validierungsfehler ausgelöst, daher versuche ich, den Slug des ActivityType vor dem Speichern zu ändern, vorausgesetzt, dass eine dynamische Seite mit diesem Slug bereits existiert.

Ich habe den folgenden Code geschrieben:

def check_and_change_slug 
    n = 1 
    slug = title 
    while DynamicPage.exists?(slug: slug) 
    slug = title + "-#{n}" 
    n + 1 
    end 
end 

Meine Frage ist, wenn ich diesen Code ausführen, bevor der Datensatz gespeichert wird, versucht Freundlich ID einen neuen Rohling zu erstellen oder einfach mit dem, den ich gehen manuell zugewiesen?

Ich habe die Dokumentation und SO durchgesehen, aber kann nichts finden.

Vielen Dank im Voraus.

Antwort

1

Sie candidates Funktionalität, um dies zu erreichen, verwenden:

class ActivityType < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :slug_candidates, use: :slugged 

    def slug_candidates 
    n = 1 
    slug = title 
    while DynamicPage.exists?(slug: slug) 
     slug = title + "-#{n}" 
     n += 1 
    end 
    end 
end 
+0

Vielen Dank für die Antwort - sorry, ich sollte in meiner Eingangsfrage festgestellt haben - es gibt eine dynamische Seite bereits einmal vorhandene sein kann, wenn die Schnecke hat nicht Ich benutze es schon vorher, also muss ich eine manuelle Überprüfung und Zuweisung machen - Ihr Code macht sicherlich Sinn, aber ich glaube nicht, dass er hier verwendet werden kann. – Mark

+0

@Mark Ich habe meine Antwort aktualisiert. Sie können Ihren Code in die 'slug_candidates' Methode einfügen. Ich habe es in einem Beispielprojekt getestet und es hat wie erwartet funktioniert –

+0

Vergessen zu antworten - funktionierte perfekt vielen Dank! – Mark

Verwandte Themen