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