lib/neo4j/active_node/property.rb in neo4j-5.2.1 vs lib/neo4j/active_node/property.rb in neo4j-5.2.2

- old
+ new

@@ -13,19 +13,36 @@ # Extracts keys from attributes hash which are associations of the model # TODO: Validate separately that relationships are getting the right values? Perhaps also store the values and persist relationships on save? def extract_association_attributes!(attributes) return unless contains_association?(attributes) attributes.each_with_object({}) do |(key, _), result| - result[key] = attributes.delete(key) if self.association?(key) + result[key] = attributes.delete(key) if self.association_key?(key) end end + def association_key?(key) + association_method_keys.include?(key.to_sym) + end + private def contains_association?(attributes) return false unless attributes - attributes.each_key { |key| return true if associations_keys.include?(key) } - false + + attributes.each_key.any?(&method(:association_key?)) + end + + # All keys which could be association setter methods (including _id/_ids) + def association_method_keys + @association_method_keys ||= + associations_keys.map(&:to_sym) + + associations.values.map do |association| + if association.type == :has_one + "#{association.name}_id" + elsif association.type == :has_many + "#{association.name.to_s.singularize}_ids" + end.to_sym + end end end end end