Created
April 25, 2022 06:13
-
-
Save boazadato/aa71496ed4e9ca76af619be3f700f7b7 to your computer and use it in GitHub Desktop.
playing with mongoid save vs changed vs array relations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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