3
Rubin 2.1.8 Schienen 3.2.18Rails Active bedingter Rückruf Ausgabe
Ich versuche, einen Rückruf zu laufen, wenn ein Datensatz nur dann, wenn ein bestimmtes Attribut gespeichert wird, wird geändert. Zum Beispiel
before_save :do_the_thing, if: :my_attr_changed?
Allerdings, wenn ich my_attr
und speichern ändern, wird do_the_thing
nicht immer genannt. Und doch, wenn ich genau die gleiche Sache, aber mit:
before_save :do_the_thing
def do_the_thing
puts my_attr_changed?
end
Es gibt „true“ in den Protokollen. Eher verwirrt hier. Jede Hilfe wird geschätzt. Vielen Dank.
Was passiert, wenn Sie einen einen Lambda anstelle eines Symbols verwenden? 'before_save: do_the_thing, wenn: -> {my_attr_changed? } ' – max
Obwohl die Verwendung eines Symbols hier funktionieren sollte. Haben Sie einen Test erstellt, der das Problem repliziert, und sind absolut sicher, dass der Fehler nicht in der Methodik enthalten ist? – max
Symbol sollte funktionieren –