我正在使用Cinch IRC框架创建一个允许用户使用CRUD引号的引用函数。
我遇到了问题;我将我的迭代基于cinch-quote gem,它使用YAML来存储引号。
它将YAML中的引号加载到多维哈希中。 delete_quote方法需要按ID查找标记的引用,并在YAML数据库中将其标记为“已删除”。我遇到的问题是在这个YAML DB中将删除的值从false更改为true。我是红宝石的新手,这段代码可能非常可怕而且可笑,请务必残忍。
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 :(得分:0)
您已使用以下内容找到了引用:
quote = quotes.find { |q| q["id"] == search.to_i }
为什么要再次查询文件?
相反,只需将其标记为已删除:
quote['deleted'] = true
然后将引号转储到YAML并保存文件。