1. ホーム
  2. ruby-on-rails

[解決済み】TypeError: SymbolからIntegerへの暗黙の変換がない。

2022-02-01 19:43:09

質問

Hashから値を変更しようとすると、奇妙な問題が発生します。以下のような設定をしています。

myHash = {
  company_name:"MyCompany", 
  street:"Mainstreet", 
  postcode:"1234", 
  city:"MyCity", 
  free_seats:"3"
}

def cleanup string
  string.titleize
end

def format
  output = Hash.new
  myHash.each do |item|
    item[:company_name] = cleanup(item[:company_name])
    item[:street] = cleanup(item[:street])
    output << item
  end
end

このコードを実行すると、item[:company_name]の出力は期待された文字列であるにもかかわらず、"TypeError: No implicit conversion of Symbol into Integer"と表示されます。私は何を間違えているのでしょうか?

どうすればいいですか?

あなたの item 変数には Array のインスタンスです。 [hash_key, hash_value] の形式) であるため Symbol[] メソッドを使用します。

を使うとこんな感じになります。 Hash#each :

def format(hash)
  output = Hash.new
  hash.each do |key, value|
    output[key] = cleanup(value)
  end
  output
end

または、これなし。

def format(hash)
  output = hash.dup
  output[:company_name] = cleanup(output[:company_name])
  output[:street] = cleanup(output[:street])
  output
end