Как установить динамический атрибут

Есть ли способ установить col как динамический или каким-то образом преобразовать его в действительный атрибут? В настоящее время выдает ошибку: неопределенный метод `col='для #...

def copy_stock_data_from_sandbox(cntrlr)
  source_table = cntrlr.singularize.classify.constantize
  dest_table = source_table.new
  source_table.column_names.each do |col|
    dest_table.col = xyz    # <------ This is the line in question
  end
  dest_table.save
end

Кроме того, не уверен, что заголовок является точным, пожалуйста, предложите, если "динамический атрибут" является неправильным термином для этой ситуации. Спасибо

3 ответа

Решение

Я считаю, что вы ищете следующее:

dest_table.send(:"#{col}=", xyz)

Ты можешь попробовать

dest_table.write_attribute(col, xyz)

ИЛИ ЖЕ

dest_table[col] = xyz

ИЛИ ЖЕ

dest_table.send("#{col}=", xyz)

Возможно, более идиоматичным решением для Rails было бы использование

или же attributes=(это псевдоним assign_attributes).

      attrs = User.column_names.each_with_object({}) do |col, hash|
  hash[col] = xyz
end

dest_table.assign_attributes attrs

Также сопутствующий вопрос:

Rails update_attributes без сохранения?

Другие вопросы по тегам