Ruby Activerecord中的组合更新

时间:2016-02-17 12:15:35

标签: ruby activerecord

对于我在这里做什么,有没有更好的方法在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'")

1 个答案:

答案 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