我正在尝试在rails函数上编写一个ruby,它将为任何模型创建一个新对象。这是我到目前为止所拥有的
def create_populated_object(model)
test_object = model.new
model.columns.each do |column|
attr_name = column.name
attr_type = column.type
#test_object.assign_attributes(attr_name+':'+ "9")
puts "#{':'+attr_name} => #{attr_type}"
if attr_type.to_s == 'integer'
b = '{:' + attr_name.to_s + '=>' + 9.to_s + '}'
puts b
test_object.assign_attributes(b)
puts "it worked"
elsif attr_type.to_s == 'string'
puts "string"
elsif attr_type.to_s == 'datetime'
puts "date time"
elsif attr_type.to_s == 'boolean'
puts "boolean"
elsif attr_type.to_s == 'text'
puts "text"
else
puts "UNKNOWN ATTRIBUTE TYPE"
end
end
puts test_object
end
在我的示例中,id是模型的第一个属性。我尝试将值9分配给它,但我不断收到此错误:
NoMethodError:“{:id => 9}”的未定义方法`stringify_keys':String
任何人都知道如何解决这个问题?
答案 0 :(得分:2)
您需要向方法发送Hash
对象而不是字符串:
b = { attr_name => 9 }
test_object.assign_attributes(b)
答案 1 :(得分:1)
assign_attributes
期望传递属性的哈希值。你传给它一个字符串。简单地说b = {attr_name.to_sym => 9}?