0

I am trying to initialize a class variable as a hash when I create an instance of SomeClass but I keep getting an error. Somewhat new to ruby so any help would be appreciated. Thanks

class SomeClass < ActiveRecord::Base  
  attr_accessible :some_hash  
  serialize :some_hash,   Hash  

  def initialize(args = {})  
    @some_hash != {}  
  end  
end

NoMethodError: undefined method has_key?' for nil:NilClass from /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support/whiny_nil.rb:52:inmethod_missing'
from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2827:in has_attribute?'
from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2888:in
inspect'
from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2887:in collect'
from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2887:in
inspect'
from /opt/local/lib/ruby/1.8/irb.rb:310:in output_value'
from /opt/local/lib/ruby/1.8/irb.rb:159:in
eval_input'
from /opt/local/lib/ruby/1.8/irb.rb:271:in signal_status'
from /opt/local/lib/ruby/1.8/irb.rb:155:in
eval_input'
from /opt/local/lib/ruby/1.8/irb.rb:154:in eval_input'
from /opt/local/lib/ruby/1.8/irb.rb:71:in
start'
from /opt/local/lib/ruby/1.8/irb.rb:70:in catch'
from /opt/local/lib/ruby/1.8/irb.rb:70:in
start'
from /opt/local/bin/irb:13

1 Answer 1

2

This article should help you.

In Ruby, you can easily overwrite existing code from gems by simply redefining the method ("monkey patching")

This is the #initialize method you over wrote:

# active_record/base.rb
  def initialize(attributes = nil)
    @attributes = attributes_from_column_definition
    @attributes_cache = {}
    @new_record = true
    @readonly = false
    @destroyed = false
    @marked_for_destruction = false
    @previously_changed = {}
    @changed_attributes = {}

    ensure_proper_type

    populate_with_current_scope_attributes
    self.attributes = attributes unless attributes.nil?

    result = yield self if block_given?
    _run_initialize_callbacks
    result
  end
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.