2017-06-13 30 views
0

私はそれを過度に複雑にしなければなりませんが、私は簡単な問題の周りに頭を抱えて苦労しています。Ecto associations has_one belongs_to

は、私は2つのテーブルglobal_userslocal_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 

を、私は最初、私は事実の後に2を関連付ける必要があり、LOCAL_USERを作成し、その後、global_userを作成します。

例えば、与えられた既存の有効なglobal_userおよび既存の、local_user有効な、私は関連付けるだろうか、既存のglobal_userからlocal_userを既存の?

has_oneを追加すると、外部キー自体にアクセスできなくなります(更新するには、%Global.User{:local_user_id}はありません)。

また、私はこれが簡単であると知っています。私は確かに何かを明らかにしていないと確信しています。

ありがとうございます!

答えて

0

私は誤って考えていたようです。 has_oneがある場合は、あとで参加することが潜在的に可能な参照だけです。

そこglobal_userテーブルにlocal_user_idはありませんが、あなたはそれが好きで照会したい:

あなたは has_oneの定義方法に基づいて一致をフェッチ
Repo.all from u in Global.User, preload: [:local_user] 

has_one :local_user, Local.User, foreign_key: :global_user_id 

は今理にかなっています。

もちろん、返されるフィールドを制限したい場合は、まだ複雑になる必要があります。

関連する問題