2013-05-15 3 views
0

Я использую структуру 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 
+0

YAML.load_file (@quotes_file) # Ваш новый метод get_quotes –

+0

Это очень помогло бы, если бы вы показали небольшой образец YAML и эквивалентного объекта Ruby, возвращаемого YAML после загрузки файла. –

ответ

0

Вы уже нашли цитату с помощью:

quote = quotes.find { |q| q["id"] == search.to_i } 

Почему запросов к файлу еще раз?

Вместо этого просто пометить его как удаленный:

quote['deleted'] = true 

Затем дамп котировки Into YAML и сохраните файл.

+0

Я знал, что кто-то заставит это выглядеть так легко; благодаря! –

Смежные вопросы