对于我在这里做什么,有没有更好的方法在Ruby Activerecord(而不是Rails)中进行多次更新?我不想遍历所有记录并使用if或#case。
# reset all color fields to null
Signal.where.not(color: nil).update_all("color = null")
# set color field based on status
Signal.where(status: CONFIG.status.step3).update_all("color = 'o'")
Signal.where(status: CONFIG.status.step4).update_all("color = 'r'")
Signal.where(status: CONFIG.status.manual).update_all("color = 'y'")
答案 0 :(得分:3)
可能你可以做更多DRY并使用散列样式作为参数而不是update_all
中的字符串:
# reset all color fields to null
Signal.where.not(color: nil).update_all(color: nil)
# set color field based on status
color_dependencies = {
CONFIG.status.step3 => 'o',
CONFIG.status.step4 => 'r',
CONFIG.status.manual => 'y'
}
color_dependencies.each do |status, color|
Signal.where(status: status).update_all(color: color)
end