2016-08-15 58 views
1

有沒有什麼辦法在Ecto中使用embeds_many而沒有id/primary_key字段?Ecto embeds_many無編號

我的數據庫依賴於在此字段上具有唯一索引,並且ecto會自動插入密鑰來打破此要求。

回答

1

是的。 Postgres中的embeds_many最終成爲JSON數組。定義一個表示JSON數據的模塊,並在embedded_schema的定義中使用@primary_key false。例如,假設您想要在每一行上存儲一組鍵/值對。我們稱之爲標籤。您可以像下面那樣定義它,並且您不會在數組中的每個元素上生成主鍵。您可以在該架構中使用另一個字段,該字段以任何適合您的應用的方式填充。

defmodule MyApp.Tag do 
    use MyApp.Web, :model 

    @primary_key false 
    embedded_schema do 
    field :key, :string 
    field :value, :string 
    end 

    def changeset(struct, params \\ %{}) do 
    struct 
    |> cast(params, [:key, :value]) 
    |> validate_required([:key]) 
    end 
end