在update_attribute中使用变量而不是符号

时间:2012-10-28 12:39:34

标签: ruby activerecord

我对这一切都很陌生,所以请假设我的知识最糟糕。关于

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?

来容纳变量列名

2 个答案:

答案 0 :(得分:0)

您可以使用String#to_sym

将字符串转换为符号
record.update_attribute(r["aaa"]["bbb"].to_sym , r["ccc"] )

答案 1 :(得分:0)

很抱歉,但没有足够的评论意见。

edouardbriere回答了您的问题,但是请您解释一下您的用例吗?由于某些数据而编辑模式几乎从来没有接近正确的方法来做某事。