У меня Calculator
класс, который читает так:Ruby: значения доступа через кран
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
Моя проблема заключается в том, что метод hash
всегда возвращает значения из DEFAULTS
, несмотря на @lead
имея :price
из 6.50
и а :size
от 8000
. Если я не сливаться DEFAULTS
в @lead.attributes
я получаю ноль ошибку:
undefined method `*' for nil:NilClass
Короче говоря, почему бы не мои атрибуты доступны, когда я нажимаю их? Я хочу загрузить DEFAULTS
, только если соответствующий атрибут @lead
- nil
.
Ссылка на документацию на [ 'Hash # merge'] (http://ruby-doc.org/core/Hash .html # method-i-merge). Кроме того, в простом рубине нет метода 'Hash # symbolize_keys'. – mudasobwa
Ах, спасибо огромное! Отрывая мои волосы от этой вещи, ха. –