2017-05-17 1 views
0

Ich bin ein Formular in Rails implementieren, um vorherige Versionen eines Datensatzes zu suchen - Versionierung mit PaperTrail gem implementiert. Das Formular enthält ein Dropdown-Menü für den Objekttyp (also das Modell). Daher benötige ich ein Array von Modellnamen, in denen PaperTrail enthalten ist, das sich in der Zukunft ändern könnte, um die Auswahlwerte zu füllen. Leider war ich bisher nicht erfolgreich; Ich konnte in den PaperTrail-Dokumenten nichts finden und #reflect_on_all_associations funktioniert nicht.Finden Sie Modelle mit PaperTrail in Rails app

Alle Vorschläge würden sehr geschätzt werden.

Antwort

1

Ich fand kurz nach der Veröffentlichung eine Lösung. Ich habe über die Nachfahren von ActiveRecord :: Base iteriert (dies wäre ApplicationRecord für Rails 5-Anwendungen), die alle Modelle erben und verwendet # Reduce mit einer Hilfsfunktion in PaperTrail (nämlich: paper_trail.enabled?).

ActiveRecord::Base.descendants.reduce([]) do |arr, model| 
    model.paper_trail.enabled? ? arr.push(model.name) : arr 
end 
+1

Stellen Sie sicher, dass alle Modelle geladen sind, bevor "Nachkommen" aufgerufen werden. In der Entwicklung können Sie ':: Rails.application.ager_load!' Aufrufen. In der Produktion sollte das Eager-Laden standardmäßig aktiviert sein. –

Verwandte Themen