Skip to content

Instantly share code, notes, and snippets.

@boazadato
Created April 25, 2022 06:13
Show Gist options
  • Save boazadato/aa71496ed4e9ca76af619be3f700f7b7 to your computer and use it in GitHub Desktop.
Save boazadato/aa71496ed4e9ca76af619be3f700f7b7 to your computer and use it in GitHub Desktop.
playing with mongoid save vs changed vs array relations
require 'mongoid'
Mongoid.configure do |config|
config.clients.default = {
hosts: ['localhost:27017'],
database: 'junk_db',
}
config.raise_not_found_error = false
end
class Kitty
include Mongoid::Document
field :name, type: String
belongs_to :cat
end
class Cat
include Mongoid::Document
field :just_an_array, type: Array
has_many :kitties,
before_add: :before_add_kittie, after_add: :after_add_kittie
#, after_remove: :after_remove_kittie
def before_add_kittie(kitty)
puts "before_add_kittie kitties param: #{kitty.name} changed: #{self.changed?} self.kitties #{ self.kitties.map(&:name) }"
end
def after_add_kittie(kitty)
puts "after_add_kittie kitties param: #{kitty.name} changed: #{self.changed?} self.kitties #{ self.kitties.map(&:name) }"
end
end
logger = Logger.new(STDOUT)
logger.level = :debug
Mongoid.logger = logger
Mongo::Logger.logger = logger
Cat.collection.drop
mom = Cat.new
puts "new doc mom.changed? #{mom.changed?}"
mom.save
puts "saved doc mom.changed? #{mom.changed?}"
mom.just_an_array = [1]
puts "mom new just_an_array mom.changed? #{mom.changed?}"
mom.save
puts "saved doc mom.changed? #{mom.changed?}"
mom.just_an_array << 2
puts "mom new element 2 in just_an_array mom.changed? #{mom.changed?}"
mom.save
puts "saved doc mom.changed? #{mom.changed?}"
kit1 = Kitty.new(name: 'kit1')
kit1.save
kit2 = Kitty.new(name: 'kit2')
kit2.save
puts "mom before adding kit1 mom.changed? #{mom.changed?}"
mom.kitties << kit1
puts "mom added kit1 mom.changed? #{mom.changed?}"
mom.save
puts "saved doc mom.changed? #{mom.changed?}"
puts "mom before assigning [kit2] mom.changed? #{mom.changed?}"
mom.kitties = [kit2]
puts "mom assigned [kit2] mom.changed? #{mom.changed?}"
mom.save
puts "saved doc mom.changed? #{mom.changed?}"
kit3 = Kitty.new(name: 'kit3')
kit3.save
puts "saved kit3 kit3.changed? #{kit3.changed?}"
kit3.cat = mom
puts "assigned mom kit3.changed? #{kit3.changed?}"
kit3.save
puts "saved kit3 kit3.changed? #{kit3.changed?}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment