2013-02-15 93 views
1

我写了一个迁移是执行以下操作:我可以将这两条#update_all行组合成一行吗?

Event.update_all 'tom_cancelled = false', 'tom_cancelled IS NULL' 
Event.update_all 'jerry_cancelled = false', 'jerry_cancelled IS NULL' 

可以(如果我可以,怎么办)我结合这些一起干起来?我会用块吗?

+4

你不能。它们是具有不同条件的不同陈述,旨在适用于不同的记录。 – meagar 2013-02-15 19:39:28

+0

你可以将它们打包成'CASE'语句,但是你已经拥有的可能是Rails中合适的方式。 'UPDATE tbl SET tom_cancelled = CASE WHEN tom_cancelled IS NULL then FALSE ELSE tom_cancelled END,jerry_cancelled = CASE when jerry_cancelled is NULL那么假否则jerry_cancelled END;'' – 2013-02-15 20:06:16

回答

2

你不能这样做,除非你想在ActiveRecord中使用一个循环,但它没有任何意义,因为对于SELECT,结果集中的每个记录都会有一个UPDATE查询。

以目前的方式,只运行两个查询,无论结果集中有多少条记录。

绝对不需要抽象出更多的当前代码。特别是考虑到它在迁移中运行。

相关问题