activegraph icon indicating copy to clipboard operation
activegraph copied to clipboard

Inconsistent results for has_many relation `each_rel/rels`

Open petergebala opened this issue 1 year ago • 2 comments

Looks like calling each_rel or rels affects the relation and removes objects from it.

Previously we were using: Neo4j database version: 4.4 ActiveGraph version: 11.1.0.alpha.4 Neo4j-driver-ruby: 4.4.3

Code below was working as expected.

Now we try to upgrade gem versions to: Neo4j database version: 4.4 ActiveGraph version: 11.3.1 Neo4j-driver-ruby: 4.4.4

Code example (inline, gist, or repo)

class Skill
  # ...
  has_many :out, :categories, model_class: :SkillCategory, rel_class: :SkillInCategory 
  # ...
end

class SkillCategory < Category
  has_many :in, :contents, model_class: :Skill, rel_class: :SkillInCategory
end

# Later we have test to check if we create uniq relations:
skill.categories << skill_category
skill.categories << skill_category
skill.categories << skill_category

skill.categories.each_rel.count == 1
skill.categories == [skill_category] # Fails, skill.categories relation is empty.
# Problem is with the order of the operations. Looks like calling `each_rel` replaces skill_categories with empty array.
# Real output from console:
[13] pry(#<RSpec::ExampleGroups::Skill::UniqueCategories>)> skill.categories
=> #<AssociationProxy Skill#categories [#<SkillCategory _global_id: "test-skill-category_1000001", _source_id: "1000001", _source_type: "test-skill-category", description: nil, name: "Organized systemic analyzer">]>
[14] pry(#<RSpec::ExampleGroups::Skill::UniqueCategories>)> skill.categories.each_rel.size
=> 1
[15] pry(#<RSpec::ExampleGroups::Skill::UniqueCategories>)> skill.categories
=> #<AssociationProxy Skill#categories []>
[16] pry(#<RSpec::ExampleGroups::Skill::UniqueCategories>)> skill.reload
=> #<Skill _global_id: "test-skill_1000001", _source_id: "1000001", _source_type: "test-skill", name: "Integrated Contextually-Based Ability">
[17] pry(#<RSpec::ExampleGroups::Skill::UniqueCategories>)> skill.categories
=> #<AssociationProxy Skill#categories [#<SkillCategory _global_id: "test-skill-category_1000001", _source_id: "1000001", _source_type: "test-skill-category", description: nil, name: "Organized systemic analyzer">]>
[18] pry(#<RSpec::ExampleGroups::Skill::UniqueCategories>)> skill.categories.rels.size
=> 1
[19] pry(#<RSpec::ExampleGroups::Skill::UniqueCategories>)> skill.categories
=> #<AssociationProxy Skill#categories []>

petergebala avatar May 16 '23 11:05 petergebala