繁体   English   中英

Rails使用哈希更新多个记录

[英]Rails update multiple record with hash

我需要迭代更新数据。

但是我实现的以下方法太耗时了。

我可以使用id-value哈希id-value更新多个记录吗?

SUBST = ''.freeze
re = /<p>|<\/p>/m
(1..1000).each do |id|
  choice = QuestionChoice.find id
  choice.selections.gsub!(re, SUBST)
  choice.save! if choice.changed?
end

更新:

由于我发现我的代码可以通过使用where进行改进

像下面

QuestionChoice.where(id: (1..1000)).each do |choice|
  choice.selections.gsub!(re, SUBST)
  choice.save! if choice.changed?
end

但是现在我仍然需要调用save! 每条记录将花费很多时间。

您要依次访问数据库1000次以分别获取每个记录,请尝试使用单个查询来获取所有需要更新的记录:

SUBST = ''.freeze
re = /<p>|<\/p>/m
QuestionChoice.where('id <= 1000').map do |q| 
  q.selections.gsub!(re, SUBST) 
  q.save! if q.changed?
end

我曾经面对这个问题,并且解决了。 请尝试以下操作:

MySQL 8.0+:

QuestionChoice.where(id: 1..1000).update_all("selections = REGEXP_REPLACE(selections, '<p>|<\/p>', '')")

其他:

QuestionChoice.where(id: 1..1000).update_all("selections = REPLACE(selections, '</p>', '')")

要么

QuestionChoice.where(id: 1..1000).update_all %{
  selections =
    CASE 
    WHEN selections RLIKE '<p>|<\/p>' 
    THEN REPLACE(selections,'<p>|<\/p>', '')
    END 
    WHERE selections RLIKE '<p>|<\/p>'
}

重要说明 :如有必要,请在子句中的正则表达式模式中添加一些反斜杠( \\ )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM