Модель продолжения с двумя соединенными таблицами

У меня есть устаревшая база данных PostgreSQL, которая имеет единую модель, разделенную на две таблицы с взаимно однозначным сопоставлением между ними.

CREATE TABLE auth_user (
    id SERIAL,
    username VARCHAR(30),
    email VARCHAR(75),
    password VARCHAR(64),
    first_name VARCHAR(75),
    last_name VARCHAR(75)
)
CREATE TABLE user_profile (
    user_id INTEGER REFERENCES auth_User.id,
    phone VARCHAR(32)
)

К сожалению, я не могу изменить структуру базы данных.

Я хочу использовать это как единую модель Sequel. Получение данных из базы данных работает как положено:

class User < Sequel::Model
end

# Variant 1: using LEFT JOIN
#User.set_dataset DB[:auth_user].left_join(:user_profile, :user_id => :id)

# Variant 2: using two FROM tables
User.set_dataset DB[:auth_user, :user_profile]\
                   .where(:auth_user__id => :user_profile__user_id)

user = User[:username => "root"] # This works.

Однако сохранение модели не удается:

user.set :first_name => "John"
user.save                        # This fails.

Если я использую сначала Вариант набора данных (с left_join) Я получаю сообщение об ошибке «Требуется несколько таблиц FROM при обновлении/удалении набора данных с помощью JOINs». Если я использую второй вариант, он все равно не работает: « PG::Error: ОШИБКА: столбец "телефон" отношения "auth_user" не существует СТРОКА 1: ..."email" = (скрытый) "пароль" = '!', "телефон"... "

Есть ли способ заставить Sequel беспрепятственно выполнять два оператора UPDATE? (Тот же вопрос относится и к операторам INSERT).

5
задан drdaeman 13 June 2012 в 19:30
поделиться