Как выполнить итерацию по списку столбцов ActiveRecord и заменить текст?

#ruby-on-rails

Вопрос:

Я заметил, что мой текстовый редактор вставил несколько странных символов, которые необходимо заменить. У меня есть около 13 записей, каждая из которых содержит, возможно, 6-7 столбцов, содержащих текст, который необходимо заменить этим символом. Вот что я сделал, чтобы придумать вариант:

 Assessment.find(1039).issues.each do |issue|
  issue.attributes.each do |attribute|
    issue.attributes.keys.each do |key|
      if issue.attributes[key].to_s.include? "u2019"
        issue.update(key, issue.attributes[key].gsub("u2019", "'"))
      end
    end
  end
end
 

Однако это не работает, так как я получаю следующую ошибку:

 Traceback (most recent call last):
        6: from (irb):212
        5: from (irb):213:in `block in irb_binding'
        4: from (irb):213:in `each'
        3: from (irb):214:in `block (2 levels) in irb_binding'
        2: from (irb):214:in `each'
        1: from (irb):216:in `block (3 levels) in irb_binding'
ArgumentError (wrong number of arguments (given 2, expected 1))
 

Как бы я этого добился?

Ответ №1:

ActiveRecord::Persistence#update получает один аргумент, представляющий собой хэш, содержащий ключи (столбцы) и значения (значения обновления) для использования в инструкции UPDATE.

Попробуйте вместо этого:

 issue.update(key => issue.attributes[key].gsub("u2019", "'"))
 

Я мог бы порекомендовать вам получить каждую проблему по их assesment_id (если она существует), а затем find_each , возможно, если количество записей достаточно велико.