首页 > 解决方案 > 如何遍历 ActiveRecord 列列表并替换文本?

问题描述

我注意到我的文本编辑器插入了几个需要替换的奇怪字符。我有大约 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))

我将如何做到这一点?

标签: ruby-on-rails

解决方案


ActiveRecord::Persistence#update接收单个参数,该参数是包含要在 UPDATE 语句中使用的键(列)和值(更新值)的散列。

请尝试:

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

我可以建议您通过它们(如果存在)来获取每个问题assesment_id,然后find_each也许,如果记录数量足够大。


推荐阅读