Ваш код не может назначить какой-либо атрибут, потому что вы всегда присваиваете один атрибут с именем "symkey":
symkey = key.to_sym
updatePerson[:symkey] = value.to_s # assigns to attribute "symkey", not to the attribute with the name stored in variable symkey
Если вы хотите превратить ключ в символ (что, вероятно, даже не нужно), а затем использовать его в качестве индекса для доступа к атрибуту в updatePerson, вы можете написать:
updatePerson[key.to_sym] = value.to_s
updatePerson.save
Но это - более или менее - то же самое, что и
updatePerson.updateAttribute(key.to_sym, value.to_s) # update and save
за исключением того, что проверка не запускается, поэтому используйте с осторожностью.
И с точки зрения производительности, возможно, не очень хорошая идея сохранять человека после каждого назначения, поэтому, возможно, вы захотите отложить вызов .save()
до тех пор, пока не назначите все атрибуты.
Тем не менее, updateAttributes(...)
- это то, что вы, возможно, захотите изучить - если вы это сделаете, не забудьте сообщить о attr_protected
или attr_accessible
, так как они защищают атрибуты от «массового назначения»