Dirty tracking lost when setting parent with numeric_order option
ryanb opened this issue · 1 comments
ryanb commented
Say I have a model with numeric_order option:
class Category < ApplicationRecord
has_closure_tree order: "position", numeric_order: true
endWith this setting we lose dirty tracking after setting the parent:
category.update! parent: parent_category, name: "Foo"
category.saved_change_to_name? # => falseAll dirty tracking is lost since it ends up calling reload internally.
Perhaps this code could just reload the order attribute instead of the entire record? This way dirty tracking would persist.
ryanb commented
For the record, I'm currently monkey-patching to work around this issue. Feel free to use this in the implementation.
# in an initializer:
module ClosureTree
module NumericDeterministicOrdering
def _ct_reorder_siblings(minimum_sort_order_value = nil)
_ct.reorder_with_parent_id(_ct_parent_id, minimum_sort_order_value)
if !destroyed? && _ct.order_column
self[_ct.order_column] = self.class
.where(self.class.primary_key => id_in_database)
.pick(_ct.order_column)
clear_attribute_change(_ct.order_column)
end
end
end
end