2017-04-12 3 views
0

Unter der Annahme,Ecto Verein mehr als ein Schemen

schema "infrastructure_instances" do 
    belongs_to :provider, MyApp.Infrastructure.Provider 
    belongs_to :user, MyApp.Web.User 
end 

und

schema "infrastructure_providers" do 
    belongs_to :user, MyApp.Web.User 
    has_many :instances, MyApp.Infrastructure.Instance 
end 

... und

schema "account_users" do 
    has_many :providers, MyApp.Infrastructure.Provider 
    has_many :instances, MyApp.Infrastructure.Instance 
end 

Wie würde ich einen Verein für eine Instanz zu einem Provider bauen und ein Benutzer

T seine Werke, aber es sicherlich ein besserer Weg geben sollen,

def create_instance(attrs \\ %{},user) do 
    user 
    |> build_assoc(:instances,provider_id: provider_id) 

Danke

+0

würde ich wahrscheinlich nur tun '% Instance {PROVIDER_ID: provider.id, user_id: user.id}' hier für Klarheit. – Dogbert

+0

@Dogbert, Noch eine andere Möglichkeit, dies zu dong. Danke! – dev

Antwort

0
build_assoc(user, :instances, provider: provider) 

(hoffentlich funktioniert es auf diese Art und Weise) oder

build_assoc(user, :instances, provider_id: provider_id) 

scheint mich in Ordnung. Dein Weg ist nicht so schlimm, denke ich.

Oder vielleicht dies, wenn Sie benötigen einen changeset erstellen ->

%Instance{} 
|> Changeset.change() 
|> Changeset.put_assoc(:user, user_struct_or_changeset) 
|> Changeset.put_assoc(:provider, provider_struct_or_changeset) 
+0

Vielen Dank für Ihre Vorschläge. War das Übergeben von Map.from_struct an build_assoc/3? – dev