我必须让它变得过于复杂,但我很难绕过一个简单的问题。
假设我有两个表,global_users
和local_users
:
create table(:global_users, primary_key: false) do
add :id, :integer, primary_key: true
add :local_user_id, references(:local_users)
...
end
create table(:local_users, primary_key: false) do
add :id, :integer, primary_key: true
add :global_user_id, references(:global_users)
...
end
@primary_key {:id, :integer, autogenerate: false}
schema "global_users" do
has_one :local_user, Local.User
...
end
@primary_key {:id, :integer, autogenerate: false}
schema "local_users" do
belongs_to :global_user, Global.User
...
end
以编程方式,我将首先创建一个global_user,然后创建一个local_user,然后我需要将两者关联起来。
例如,如果现有的,有效的global_user
和现有的有效local_user
,我如何将现有的local_user
与现有的global_user
相关联?
添加has_one
后,我无法再访问外键(例如,没有%Global.User{:local_user_id}
要更新,只有关联!)。
同样,我知道这似乎很简单,我确信我只是遗漏了一些明显的东西。
提前致谢!
答案 0 :(得分:0)
好吧,看起来我在考虑错误。当你有一个has_one
时,它实际上只是一个可能会在以后为你保存连接的引用。
e.g。 local_user_id
表格中没有global_user
,但您可以查询它:
Repo.all from u in Global.User, preload: [:local_user]
然后根据您定义has_one
:
has_one :local_user, Local.User, foreign_key: :global_user_id
现在有道理。
当然,如果你想限制返回的字段,你仍然需要变得复杂......