在Rails 3中,我试图使用像self.children.joins(:parent).where(...).update_all(...)
这样的语句来选择记录的子集并将它们全部更新。这适用于MySQL,但不适用于PostgreSQL。 Rails语法错了吗?
详细
会员属于家庭,家庭有很多成员。有问题的陈述是在一个家庭实例方法中,所以“自我”是一个家庭:
self.members.joins(:family).
where('spouse_id > 0 OR child OR members.id = families.head_id').
update_all("members.residence_location_id = #{self.residence_location_id}")
换句话说,对于此系列的成员子集,将family residence_location复制到成员residence_location。
这在MySQL中非常有效。但是当我改为PostgreSQL时,我收到了这个错误:
PGError: ERROR: syntax error at or near "INNER"
LINE 1: UPDATE "members" INNER JOIN "families" ON "families"."id" = ...
UPDATE "members" INNER JOIN "families" ON "families"."id" = "members"."family_id"
SET members.residence_location_id = 27
WHERE ("members".family_id = 425) AND
(spouse_id > 0 OR child OR members.id = families.head_id)
我的Rails语句是不正确的,但恰好在MySQL工作?有没有办法解决它与PostgreSQL一起使用?或者也许是使用MetaWhere的方法?