我正在处理复杂的注册表格。 我的用户将拥有其联系信息和项目集合的个人资料。 我的架构(用户,个人资料,电话,收藏品,项目)如下所示:
defmodule MyProject.User
schema "users" do
field :email, :string
field :name, :string
has_many :profiles, MyProject.Profile, on_delete: :delete_all
has_many :collections, through: [:profiles, :collections]
timestamps()
end
end
defmodule MyProject.Profile
schema "profiles" do
field :address, :string
field :skype, :string
belongs_to :user, MyProject.User
has_many :phones, MyProject.Phone, on_delete: :delete_all
has_many :collections, MyProject.Collection, on_delete: :delete_all
timestamps()
end
end
defmodule MyProject.Phone
schema "phones" do
field :phone, :string
belongs_to :profile, MyProject.Profile
end
end
defmodule MyProject.Collection
schema "collections" do
field :name, :string
has_many :items, MyProject.Item, on_delete: :delete_all
timestamps()
end
end
defmodule MyProject.Item
schema "items" do
field :name, :string
field :type, :string
field :url, :string
belongs_to :collection, MyProject.Collection
timestamps()
end
end
现在我需要构建复杂的注册表单,该表单允许用一些手机和一个集合创建用户和他的个人资料,其中包含一些项目,一个表单提交。 由于表注册不存在,我认为我需要使用embedded_schema,因为它不依赖于数据库表:
defmodule MyProject.Registration
embedded_schema do
end
end
但我不确定如何描述其中的所有嵌套关联。我应该使用has_one,has_many或embed_one,embed_many还是两者都没有,这有什么影响? 如何构造表单,我应该使用inputs_for作为嵌套关联吗? 如何将所有关联值保存到数据库以保留所有关系? 首先,用户需要保存,然后是他的个人资料,然后是一些电话,然后是收集,最后是一些项目。所有这些都应该捆绑在一起。