创建实例时初始化一个哈希变量
我试图初始化一个类变量作为哈希当我创建一个SomeClass的实例但我不断收到错误。有点新红宝石,所以任何帮助,将不胜感激。感谢创建实例时初始化一个哈希变量
class SomeClass < ActiveRecord::Base
attr_accessible :some_hash
serialize :some_hash, Hash
def initialize(args = {})
@some_hash != {}
end
end
NoMethodError:未定义的方法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:in
method_missing的”
从/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
从/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
从的/ opt/local/lib目录/ruby/1.8/irb.rb:310:in output_value'
eval_input'
from /opt/local/lib/ruby/1.8/irb.rb:159:in
from /opt/local/lib/ruby/1.8/irb.rb:271:in signal_status'
eval_input'
from /opt/local/lib/ruby/1.8/irb.rb:155:in
从/opt/local/lib/ruby/1.8/irb.rb:154:in eval_input'
开始从
from /opt/local/lib/ruby/1.8/irb.rb:71:in
'从/opt/local/lib/ruby/1.8/irb.rb:70:in catch'
开始
from /opt/local/lib/ruby/1.8/irb.rb:70:in
'/opt/local/bin/irb:13
This article should help you。
在Ruby中,你可以很容易地覆盖通过简单地重新定义方法(“猴子补丁”)
这是#initialize方法,你在写现有的从宝石代码:
# 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