Ecto与多个模式的关联

时间:2017-04-12 12:13:18

标签: elixir phoenix-framework ecto

假设

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

如何为实例向提供者和用户构建关联

这很有效,但肯定会有更好的方法,

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

谢谢

1 个答案:

答案 0 :(得分: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)