Mysql Rails使用哈希更新多个记录

Mysql Rails使用哈希更新多个记录,mysql,ruby-on-rails,ruby,activerecord,Mysql,Ruby On Rails,Ruby,Activerecord,我需要迭代更新我的数据 但是下面我实现的方法太耗时了 我可以用id值hash更新多个记录吗 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 但是现在我仍然需要调用save对于每个需要花费

我需要迭代更新我的数据

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

我可以用
id值
hash更新多个记录吗

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

但是现在我仍然需要调用
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
SUBST=''。冻结
re=/|/m

问题选择。如果('id您按顺序点击数据库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
SUBST=''。冻结
re=/|/m

问题选择。where('id我过去经常面对这个问题,我解决了它。尝试以下方法:

MySQL 8.0+:

QuestionChoice.where(id: 1..1000).update_all("selections = REGEXP_REPLACE(selections, '<p>|<\/p>', '')")
QuestionChoice.where(id:1..1000).全部更新(“selections=REGEXP\u REPLACE(selections,|',”))
其他:

QuestionChoice.where(id: 1..1000).update_all("selections = REPLACE(selections, '</p>', '')")
QuestionChoice.where(id:1..1000).全部更新(“selections=REPLACE(selections)”,“”)

QuestionChoice.where(id:1..1000).更新所有%{
选择=
案例
当选择像“|”时
然后替换(选项“|”和“”)
结束
其中选择像“|”
}

重要:如果需要,尝试在子句中的正则表达式模式中添加一些反斜杠(
\
)。

我曾经遇到过这个问题,并解决了它。尝试以下操作:

MySQL 8.0+:

QuestionChoice.where(id: 1..1000).update_all("selections = REGEXP_REPLACE(selections, '<p>|<\/p>', '')")
QuestionChoice.where(id:1..1000).全部更新(“selections=REGEXP\u REPLACE(selections,|',”))
其他:

QuestionChoice.where(id: 1..1000).update_all("selections = REPLACE(selections, '</p>', '')")
QuestionChoice.where(id:1..1000).全部更新(“selections=REPLACE(selections)”,“”)

QuestionChoice.where(id:1..1000).更新所有%{
选择=
案例
当选择像“|”时
然后替换(选项“|”和“”)
结束
其中选择像“|”
}

重要:试着打几下回击(
\
)如果需要,请访问子句中的正则表达式模式。

Hi@Coda Chang,保存选项时是否有回调?您可以尝试批处理-@fongfan999正确:在数据库中完成所有操作。@fongfan999,是的,如果保存成功,它将返回
true
。Hi@Coda Chang,保存选项时是否有回调?您可以y批-@fongfan999在正确的轨道上:在数据库中完成所有操作。@fongfan999,是的,如果保存成功,它将返回
true
。哦,但是这样,q仍然需要
save
1000次。我已经更新了我的问题。这种方法是保存
find
查询的好方法,但我正在寻找保存
update
query.@CodaChang如果你使用的是
MySQL 8.0+
你可以使用
update\u all
并使用DB功能
REGEXP\u REPLACE
根据这个答案不幸的是,我使用的是MySQL 5.6,但它也是一个很好的参考。Thx.Oh,但是这样,q仍然需要
保存
1000次。我已经更新了my问题。这种方法是保存
find
查询的好方法,但我正在寻找保存
update
查询的方法。@CodaChang如果你使用的是
MySQL 8.0+
你可以使用
update\u all
并使用数据库功能
REGEXP\u REPLACE
,根据这个答案不幸的是,我使用的是MySQL 5.6,但它也是一个不错的选择d参考。Thx。