0

私はこれらすべてにかなり慣れていないので、私の知識について最悪の事態を想定してください。それにかんする

record = tablename.new
result["top"].each do |r|    #result is the answer from a variable length JSON
  if ActiveRecord::Base.connection.column_exists?(:tablename, r["aaa"]["bbb"] )
    record.update_attribute(r["aaa"]["bbb"] , r["ccc"] )
  else
    ActiveRecord::Base.connection.add_column(:tablename, r["aaa"]["bbb"] , :integer )
    #record.update_attribute( r["aaa"]["bbb"] , r["ccc"] )
  end
record.save

update_attribute でシンボルの代わりに変数を使用しているため、このエラーが発生します。

undefined method `stringify_keys' for "contents of r["aaa"]["bbb"]":String (NoMethodError)

ただし、実際には列の名前がわからないため、シンボルを使用できません。次の行からわかるように、すべて動的に生成されます。

ActiveRecord::Base.connection.add_column(:tablename, r["aaa"]["bbb"] , :integer )

つまり、update_attribute を使用して可変列名を使用するにはどうすればよいでしょうか?

4

2 に答える 2

0

申し訳ありませんが、コメントするのに十分なポイントではありません。

edouardbriere があなたの質問に答えましたが、ユースケースを説明してもらえますか? 一部のデータの結果としてスキーマを編集することは、何かを行うための正しい方法に近いことはほとんどありません。

于 2012-10-28T13:44:36.917 に答える
0

String#to_symを使用して文字列をシンボルに変換できます

record.update_attribute(r["aaa"]["bbb"].to_sym , r["ccc"] )
于 2012-10-28T12:56:15.617 に答える