Conversation
in order to respect a certain children order when calling rebuild! the children will be reordered with whatever the argument of `child_order` was
| Metal.create(value: "name1") | ||
| Metal.create(value: "name2") | ||
| expect(parent.children).to receive(:reorder).with({value: :desc}).once.and_call_original | ||
| parent.rebuild!(child_order: {value: :desc}) |
There was a problem hiding this comment.
we should assert that the order is correct.
There was a problem hiding this comment.
great idea. i asserted that on our project but that's of course not sufficient. can you please help me how i could do it? The Metal model doesn't seem to have a sort_order, how would you write a spec for this?
There was a problem hiding this comment.
expect(parent.children[0].value).to_equal 'name1'
expect(parent.children[1].value).to_equal 'name2'
expect(parent.children[2].value).to_equal 'name3'
There was a problem hiding this comment.
expect(parent.children[0].value).to_equal 'name1'
expect(parent.children[1].value).to_equal 'name2'
expect(parent.children[2].value).to_equal 'name3'
okay, if that would be sufficient, lemme add that quick. thanks.
There was a problem hiding this comment.
@seuros is it possible that my fix isn't really a fix for the scope of the gem? it did work on our project, but i can't get it running for the specs on the gem.
i did create a new model which should the the numeric ordering.
class MetalWithNumericOrder < ActiveRecord::Base
self.table_name = "#{table_name_prefix}metal#{table_name_suffix}"
has_closure_tree order: 'sort_order', name_column: 'value', numeric_order: true
self.inheritance_column = 'metal_type'
end
parent = MetalWithNumericOrder.create(value: "Parent")
MetalWithNumericOrder.create(value: "3", parent: parent)
MetalWithNumericOrder.create(value: "1", parent: parent)
MetalWithNumericOrder.create(value: "2", parent: parent)
parent.rebuild!
i create a tree and now the order is 3, 1, 2 which is correct.
i would like to recreate the tree, but sort based on value, so i would expect then descendants to be 1,2,3
however i seem to be missing some logic here.
i had the impression that children.reorder(child_order).find_each { |c| c.rebuild!(true, child_order: child_order) } would be sufficient since that decides how we reorder the tree but it seems to be done in reorder_with_parent_id. do i need to inject the reordering in there?
There was a problem hiding this comment.
Do you have act as list in the app ?
There was a problem hiding this comment.
@seuros yes, acts_as_list is within it. does it interfere?
There was a problem hiding this comment.
Sorry @krtschmr , i missed this PR.
As you noticed reorder is part of Act as list and this gem . We could add a file that is required manually to add this feature. But it should not be part of the core maintenance file.
|
shall we close this? |
#376
in order to respect a certain children order when calling rebuild! the children will be reordered with whatever the argument of
child_orderwas