2017-04-12 1 views
0

En supposantassociation Ecto à plus d'un schémas

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

et

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

... et

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

Comment je construire une association pour une instance à un fournisseur et un utilisateur

T ses œuvres, mais il devrait certainement être une meilleure façon,

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

Merci

+0

Je ferais probablement juste '% instance {PROVIDER_ID: provider.id, user_id: user.id}' pour plus de clarté. – Dogbert

+0

@Dogbert, Encore une autre façon possible de dong cela. Je vous remercie! – dev

Répondre

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

(espérons qu'il fonctionne de cette façon) ou

build_assoc(user, :instances, provider_id: provider_id) 

semble bien pour moi. Donc, votre chemin n'est pas si mauvais que je pense.

Ou peut-être si vous devez créer un changeset ->

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

Nous vous remercions de vos suggestions. Vous envisagiez de passer Map.from_struct à build_assoc/3? – dev