Skip to content

Instantly share code, notes, and snippets.

@TomK32
Forked from dbackeus/frozen.rb
Created September 1, 2011 07:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TomK32/1185664 to your computer and use it in GitHub Desktop.
Save TomK32/1185664 to your computer and use it in GitHub Desktop.
Referenced document frozen on childs after_destroy callback
class Parent
include Mongoid::Document
field :something, :type => String
has_many :children
after_create :create_child
private
def create_child
children.create
end
end
class Child
include Mongoid::Document
belongs_to :parent
after_destroy :update_parent
private
def update_parent
parent.update_attributes(:something => "value")
end
end
Parent.create
Child.first.destroy
@TomK32
Copy link
Author

TomK32 commented Sep 1, 2011

RuntimeError: can't modify frozen hash
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/attributes.rb:104:in `[]='
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/attributes.rb:104:in `block (2 levels) in write_attribute'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/attributes.rb:100:in `tap'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/attributes.rb:100:in `block in write_attribute'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/attributes.rb:170:in `assigning'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/attributes.rb:98:in `write_attribute'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/fields.rb:314:in `block (2 levels) in create_accessors'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/relations/bindings/referenced/in.rb:25:in `block in bind'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/relations/binding.rb:21:in `binding'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/relations/bindings/referenced/in.rb:23:in `bind'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/relations/proxy.rb:19:in `bind_one'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/relations/referenced/in.rb:24:in `block in initialize'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/relations/proxy.rb:34:in `init'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/relations/referenced/in.rb:22:in `initialize'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/relations/accessors.rb:44:in `new'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/relations/accessors.rb:44:in `create_relation'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/relations/accessors.rb:26:in `build'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/relations/accessors.rb:100:in `block (3 levels) in getter'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/relations/builders.rb:47:in `building'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/relations/accessors.rb:99:in `block (2 levels) in getter'
        from (irb):21:in `update_parent'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.1.0/lib/active_support/callbacks.rb:392:in `_run_destroy_callbacks'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.1.0/lib/active_support/callbacks.rb:81:in `run_callbacks'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.2.0/lib/mongoid/persistence.rb:31:in `destroy'
        from (irb):32
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.1.0/lib/rails/commands/console.rb:45:in `start'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.1.0/lib/rails/commands/console.rb:8:in `start'
        from /Users/tomk32/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.1.0/lib/rails/commands.rb:40:in `<top (required)>'
        from script/rails:6:in `require'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment