0

Cinch IRC フレームワークを使用して、ユーザーが引用を CRUD できる引用機能を作成しています。

問題が発生しています。YAML を使用して引用符を保存する cinch-quote gem に基づいて反復を行いました。

YAML からの引用符を多次元ハッシュにロードします。delete_quote メソッドは、マークされた引用を ID で検索し、YAML データベースで「削除済み」としてマークする必要があります。私が抱えている問題は、この YAML DB で削除された値を false から true に変更することです。私は ruby​​ に慣れていないので、このコードはおそらくまったくひどいものであり、笑えるものです。

  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
4

1 に答える 1

0

次を使用して、すでに引用を見つけました。

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

なぜもう一度ファイルを照会するのですか?

代わりに、削除済みとしてマークするだけです。

quote['deleted'] = true

次に、引用符を YAML にダンプし、ファイルを保存します。

于 2013-05-15T03:31:27.957 に答える