带有PostgreSQL的Rails 3:连接表中的"update_all"问题



在Rails 3中,我试图使用像self.children.joins(:parent).where(...).update_all(...)这样的语句来选择记录的子集并更新它们。这在MySQL中工作,但在PostgreSQL中不工作。是Rails语法错误吗?

细节

成员属于家庭,家庭有许多成员。所讨论的语句位于Family实例方法中,因此"self"是一个族:

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}")

换句话说,对于这个家族成员的子集,将家族成员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的一种方法?

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

相关内容

  • 没有找到相关文章

最新更新