Мне кажется, проблема в том, что вы меняете только возвращенный хэш атрибута, а не объект ActiveRecord.
Вам нужно сделать что-то вроде:
# make hash h
@items.attributes = h
Возможно, следуя вашему примеручто-то вроде:
@items.attributes = %w{type1 type2 type3 type4}.inject({}) { |m, e| m[e] = 'Test item'; m }
Кстати, "#{e}"
- это то же самое, что строковое выражение e
или для любого типа: e.to_s
.Второй пример, возможно, легче читаемый:
a = %w{type1 type2 type3 type4}
h = {}
a.each { |name| h[name] = 'test item' }
@items.attributes = h
Использование метода attributes=
, вероятно, предназначено для хеш-констант, например:
@items.attributes = { :field => 'value', :anotherfield => 'value' }
Для полностью сгенерированных атрибутов вы можете взять Предложение ДаннеМанна и использование отправки.