Ist es möglich, den Operator <<
für ein Postgres-Array-Typ-Attribut, das von ActiveRecord erstellt wurde, zu überschreiben?überschreiben Postgres-Array-Typ Shift-Operator
Spaltendefinition:
t.time "hours", default: [], array: true
Dies scheint zu funktionieren:
def hours=(arr)
super(arr.map {|h| # do some stuff with each element})
end
Dies gilt nicht:
def hours<<(val)
super(# do some stuff before pushing)
end
Beachten Sie, dass dies nicht eine Vereinigung von has_many
erstellt ist, wo ich kann Überlademethoden einen Block hinzufügen.
Gibt es eine Leistung/Speicherkosten für die Einbeziehung des Moduls jedes Mal, wenn das Stundenattribut verwendet wird? – iftheshoefritz
Ja, es ist ungefähr 15x langsamer. Aber vernachlässigbar, es sei denn, Sie nennen diese Methode viele Male. Beachten Sie auch, dass 'include' nicht funktioniert hat. Was Sie eigentlich tun möchten, ist 'extend' zu verwenden. Ich habe meine Antwort bearbeitet und einen Benchmark hinzugefügt –