Rails 3 с PostgreSQL: проблема с update_all в объединенной таблице - PullRequest
3 голосов
/ 12 апреля 2011

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

1 Ответ

1 голос
/ 20 октября 2011

К вашему сведению, эта проблема, вероятно, была вызвана этим, теперь решена в Rails 3.1, проблема: https://github.com/rails/rails/issues/522

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...