2017-04-12 56 views
0

假设外生关联到多个模式

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

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

...和

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

我将如何建立一个实例关联到供应商和a用户

T他的作品,但肯定应该有更好的方式,

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

谢谢

+0

我可能只是做'%实例{PROVIDER_ID:provider.id,USER_ID:user.id}'这里清晰。 – Dogbert

+0

@Dogbert,这是另一种可能的方式。谢谢! – dev

回答

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

(希望是这样工作的)或

build_assoc(user, :instances, provider_id: provider_id) 

似乎没什么问题。所以你的想法并不是那么糟糕。

或者,也许这一点,如果你需要创建一个变更 - >

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

感谢您的建议。看着将Map.from_struct传递给build_assoc/3? – dev