【发布时间】:2012-06-13 19:30:17
【问题描述】:
我有一个旧的 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),我会收到“Need multiple FROM tables if updating/deleting a dataset with JOINs”错误。如果我使用第二种变体,它仍然会失败:“PG::Error: ERROR: column "phone" of relation "auth_user" does not exist LINE 1: ..."email" = 'nobody@example.org', "password" = '!', "phone"...”
有没有一种方法可以让 Sequel 无缝地发出两个 UPDATE 语句? (同样的问题也适用于 INSERT)。
【问题讨论】:
标签: ruby orm model left-join sequel