В 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?