Ruby on rails Ruby:通过tap访问值

Ruby on rails Ruby:通过tap访问值,ruby-on-rails,ruby,ruby-on-rails-4,hash,Ruby On Rails,Ruby,Ruby On Rails 4,Hash,我有一个计算器类,内容如下: class Calculator DEFAULTS = { price: 4.25, size: 10000 }.freeze def initialize(lead) @lead = lead end def lead_attributes @lead.attributes.symbolize_keys.merge(DEFAULTS) end def hash # massively simplified

我有一个
计算器
类,内容如下:

class Calculator
  DEFAULTS = {
    price: 4.25, size: 10000
  }.freeze

  def initialize(lead)
    @lead = lead
  end

  def lead_attributes
    @lead.attributes.symbolize_keys.merge(DEFAULTS)
  end

  def hash # massively simplified
    lead_attributes.tap do |h|
      h[:total] = h[:price] * h[:size]
    end
  end
end
我的问题是,尽管
@lead
:price
6.50
:size
8000
,但
哈希
方法始终返回
默认值。如果我没有将
默认值
合并到
@lead.attributes
中,我会得到一个零错误:

undefined method `*' for nil:NilClass
简言之,为什么我的属性在点击时不可访问?仅当匹配的
@lead
属性为
nil
时,我才想加载
默认值,否则将始终使用默认值覆盖现有的
@lead.attributes

将“潜在客户”属性更改为:

def lead_attributes
  @lead.attributes.symbolize_keys.reverse_merge(DEFAULTS)
end
或:


在这里,参考有关的文档会有所帮助。另外,在普通ruby中没有方法
Hash#symbol_key
。啊,非常感谢!为了那件事把我的头发扯下来,哈。
def lead_attributes
  DEFAULTS.merge(@lead.attributes.symbolize_keys)
end