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

您可以使用String#to_sym将字符串转换为符号

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

对不起,但没有足够的评论点。

edouardbriere 回答了您的问题,但您能解释一下您的用例吗?由于某些数据而编辑架构几乎永远不会接近正确的做事方式。

于 2012-10-28T13:44:36.917 回答