使用PostgreSQL的Rails 3:连接表中的'update_all'问题

时间:2011-04-12 13:44:04

标签: sql ruby-on-rails-3 postgresql activerecord join

在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的方法?

1 个答案:

答案 0 :(得分:1)

仅供参考,此问题可能是由此引起的,现已在Rails 3.1中解决,问题:https://github.com/rails/rails/issues/522