Rails Method_missing для возврата значений из хеша
Я пытаюсь написать метод method_missing, так что когда я запускаю метод, он должен нажать на хеш и посмотреть на ключи, если он найдет совпадение для возврата значения. и продолжай. хеш заполняется из SQL-запроса, который я написал, поэтому значения никогда не являются постоянными.
пример будет как
@month_id.number_of_white_envelopes_made
в хеш
@data_hash[number_of_white_envelopes_made] => 1
поэтому @month_id вернет 1. Я никогда не работал с ним раньше, не так много материала там с использованием хэшей, так как откат с отсутствующим методом
РЕДАКТИРОВАТЬ: извините, я забыл сказать, что если он не находит метод в хэше, то он может продолжаться вплоть до ошибки метода
РЕДАКТИРОВАТЬ: хорошо, так что я взломал, и это то, что я придумал
def method_missing(method)
if @data_hash.has_key? method.to_sym
return @data_hash[method]
else
super
end
end
Есть ли способ лучше?
2 ответа
Как насчет чего-то вроде:
def method_missing(method_sym, *arguments, &block)
if @data_hash.include? method_sym
@data_hash[method_sym]
else
super
end
end
И всегда помните, чтобы добавить соответствующий response_to? к вашему объекту:
def respond_to?(method_sym, include_private = false)
if @data_hash.include? method_sym
true
else
super
end
end
Самый короткий
class Hash
def method_missing(sym,*)
fetch(sym){fetch(sym.to_s){super}}
end
end
который первым пытается hash[:key]
а потом hash["key"]