Я использую структуру IRC Cinch, чтобы сделать функцию котировки, которая позволяет пользователям котировки CRUD.Изменение значения в многомерном хеше
У меня проблема; Я основывал свою итерацию на камне cinch-quote, который использует YAML для хранения котировок.
Он загружает цитаты из YAML в многомерный хеш. Метод delete_quote должен найти отмеченную цитату по идентификатору и пометить ее «удален» в базе данных YAML. Проблема, с которой я столкнулась, заключается в изменении удаленного значения с false на true в этой базе данных YAML. Я новичок в рубине, и этот код, вероятно, абсолютно ужасен и смешен, пожалуйста, будьте жестоки.
def get_quotes
output = File.new(@quotes_file, 'r')
quotes = YAML.load(output.read)
output.close
quotes
end
def delete_quote(m, search = nil)
if is_admin?(m) && search.to_i > 0
quotes = get_quotes
quote = quotes.find { |q| q["id"] == search.to_i }
#debugging stuff
#returns the master quote hash
p quotes
#returns the hash that i'm trying to change.
p quote
if quote.nil?
message_type(m, "Quote ID #{search} does not exist.")
else
#again, master hash
output = YAML.load_file(@quotes_file)
#here's the error. Can't convert Hash into Integer. I can't figure out why
# it'd be generating that, or how to fix it.
mark_delete = output[quote]["deleted"] = "true"
message_type(m, "Quote #{search} was deleted")
end
end
end
YAML.load_file (@quotes_file) # Ваш новый метод get_quotes –
Это очень помогло бы, если бы вы показали небольшой образец YAML и эквивалентного объекта Ruby, возвращаемого YAML после загрузки файла. –