Я пытаюсь написать метод method_missing, так что, когда я запускаю метод, он должен попасть в хэш и посмотреть на ключи, если он найдет совпадение, чтобы вернуть значение. и продолжить. хэш заполняется из SQL-запроса, который я написал, поэтому значения никогда не являются постоянными.Rails Method_missing, чтобы отбросить значения из хэша
примером может быть как
@month_id.number_of_white_envelopes_made
в хэш
@data_hash[number_of_white_envelopes_made] => 1
так @month_id вернет 1. я никогда не работал с ним раньше, не так много материала там, используя хэши в качестве вернуться обратно с отсутствующим методом
EDIT: извините, я забыл сказать, что если он не найдет метод в хэше, то он может продолжить работу до ошибки метода
EDIT: хорошо, так что я был рубил, и это то, что я придумал
def method_missing(method)
if @data_hash.has_key? method.to_sym
return @data_hash[method]
else
super
end
end
есть лучший способ?
Как об использовании [OpenStruct] (http://www.ruby-doc.org/ stdlib-1.9.3/libdoc/ostruct/rdoc/OpenStruct.html)? Вы можете инициализировать экземпляр «OpenStruct» из хэша и ссылаться на его атрибуты с помощью синтаксиса 'struct.attribute'. Если значение отсутствует, оно просто вернет 'nil', но в противном случае выглядит так, как будто оно может работать для вас. –
@ KL-7 +1 OpenStruct использует 'method_missing' под ним. – steenslag
проблема в том, что есть слишком близко к 150 ключам? поэтому создание структуры будет делать намного больше работы. я размещаю его в презентаторе, поэтому методы разбросаны по программе иногда используются некоторые методы, а в других случаях будут использоваться другие методы, и если я использую хэш, как только метод, который будет вызываться, будет определяться, и следующий время, которое оно называется, будет сохранено в памяти – TheLegend