[英]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.