Ecto:在embedded_schema

时间:2017-06-25 09:07:26

标签: elixir phoenix-framework nested-forms ecto

我正在处理复杂的注册表格。 我的用户将拥有其联系信息和项目集合的个人资料。 我的架构(用户,个人资料,电话,收藏品,项目)如下所示:

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作为嵌套关联吗? 如何将所有关联值保存到数据库以保留所有关系? 首先,用户需要保存,然后是他的个人资料,然后是一些电话,然后是收集,最后是一些项目。所有这些都应该捆绑在一起。

0 个答案:

没有答案