Ich versuche, einen Attribut-Setter in einem ActiveRecord-Modell seinen Wert in die postgres-Funktion text2ltree () zu schreiben, bevor rails seine SQL-Abfrage generiert.
Zum Beispiel
%Vor%Sollte etwas wie
erzeugen %Vor%Was ist der beste Weg, dies zu tun?
BEARBEITEN: Um genau das zu erreichen, wonach Sie suchen, überschreiben Sie den Standard-Setter in Ihrer Modelldatei:
%Vor%Dann funktioniert der Code, den Sie oben haben.
Ich bin daran interessiert, mehr über die Interna von ActiveRecord und seine undurchdringlichen Metaprogrammierungsgrundlagen zu erfahren. Als Übung habe ich versucht, das zu erreichen, was Sie in Ihren Kommentaren unten beschrieben haben. Hier ist ein Beispiel, das für mich funktioniert hat (das ist alles in post.rb):
%Vor%Konsolenausgabe:
%Vor% Im wirklichen Leben nehme ich an, dass Sie include
das Modul in ActiveRecord :: Base in einer Datei irgendwo früher im Ladepfad haben möchten. Sie müssen auch den Typ des Arguments richtig behandeln, das Sie an die Datenbankfunktion übergeben. Schließlich habe ich gelernt, dass connection.execute
von jedem Datenbankadapter implementiert wird, so dass die Zugriffe auf das Ergebnis in Postgres anders sein können (dieses Beispiel ist SQLite3, wobei die Ergebnismenge als ein Array von Hashes und der Schlüssel als erstes zurückgegeben wird) Datensatz ist 0].
Dieser Blogbeitrag war unglaublich hilfreich:
wie auch der Rails-Leitfaden für das Plugin-Authoring:
Auch, was es wert ist, denke ich, dass ich das in Postgres mit einer Migration machen würde, um eine Regel zum Umschreiben von Abfragen zu erstellen, aber das war eine großartige Lernerfahrung. Hoffentlich funktioniert es und ich kann aufhören darüber nachzudenken, wie es jetzt geht.
Tags und Links sql ruby-on-rails activerecord postgresql arel