2017-06-13 3 views
0

Ich muss es übermäßig komplex machen, aber ich habe es schwer, meinen Kopf um ein einfaches Problem zu wickeln.Ecto aktualisiert Assoziationen has_one gehört_to

sagen, dass ich zwei Tabellen, global_users und 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 

Programmatisch Ich werde zunächst eine global_user schaffen, dann eine LOCAL_USER erstellen, dann muss ich die beiden nach der Tat in Verbindung bringen.

Z. B. gegeben eine bestehende, gültige global_user und eine vorhandene gültige local_user, wie würde ich eine bestehende local_user zu einem bestehenden global_user assoziieren?

Sobald ich eine has_one hinzufügen, habe ich nicht mehr Zugriff auf den Fremdschlüssel selbst (z. B. gibt es keine %Global.User{:local_user_id} zu aktualisieren, nur eine Zuordnung!).

Noch einmal, ich weiß, das scheint einfach, und ich bin sicher, ich vermisse nur etwas Offensichtliches.

Vielen Dank im Voraus!

Antwort

0

Ok, sieht so aus, als ob ich falsch überlegt habe. Wenn Sie eine haben, ist es wirklich nur eine Referenz, die Sie später möglicherweise eine Verknüpfung speichert.

z.B. gibt es keine local_user_id in der global_user Tabelle, aber Sie würden fragen sie mag:

Repo.all from u in Global.User, preload: [:local_user] 

, die dann ein Spiel holt auf, wie Sie die has_one definieren:

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

Sinn, jetzt macht.

Natürlich, wenn Sie die Felder beschränken möchten, müssen Sie immer noch kompliziert werden ...

Verwandte Themen