2015-10-11 20 views
27

Tôi muốn lưu trữ một mảng các giá trị dấu phẩy động với Ecto bằng cách sử dụng Postgres. Tôi đang sử dụng Ecto với Phoenix Framework và Elixir.Làm thế nào để lưu trữ mảng với Ecto bằng cách sử dụng Postgres

Tôi làm cách nào để xác định mô hình và di chuyển của mình cho điều này?

tôi đã không cố gắng nhiều, ngoại trừ tìm kiếm trên web, mà không tìm thấy bất cứ điều gì hữu ích :-(

tôi đã cố gắng xác định một mô hình với một sơ đồ như thế này:

schema "my_model" do 
    field :my_array, :array 

    timestamps 
    end 

mà đưa ra một thông báo lỗi "không hợp lệ hoặc kiểu không rõ: mảng cho lĩnh vực: my_array"

Trả lời

39

tôi tìm thấy câu trả lời trong danh sách các kiểu dữ liệu Ecto.Schema đây:

Ecto.Schema

Câu trả lời là để xác định kiểu như thế này:

schema "my_model" do 
    field :my_array, {:array, :float} 

    timestamps 
    end 
+5

Cảm ơn, làm thế nào bạn sẽ viết di cư cho rằng? – neildaemond

+0

Đây là ví dụ về máy phát: 'mix phx.gen.schema Blog.Post blog_posts tags: array: string' – Sash

20

As You viết sử dụng các loại mảng từ Ecto.Schema

Trong mô hình:

schema "my_model" do 
    field :my_array, {:array, inner_type} 
end 

@neildaemond Migration :

alter table(:my_models) do 
    add :my_array, {:array, inner_type} 
end 

Thay thế inner_type bằng một trong các loại hợp lệ, chẳng hạn như :string.

Bạn cũng có thể làm điều tương tự với một loại map:

schema "my_model" do 
    field :my_map, {:map, inner_type} 
end 
+1

Bất kỳ ý tưởng nào về cách xây dựng đúng biểu mẫu cho phép ai đó nhập các phần tử của mảng hoặc bản đồ này? – pmarreck

+0

@pmarreck bạn đã xem tài liệu Biểu mẫu chưa? https://hexdocs.pm/phoenix_html/Phoenix.HTML.Form.html Tôi thường làm việc trên ứng dụng API để tôi không sử dụng biểu mẫu và không thể giúp –

+0

Tôi có, không thấy bất kỳ điều gì hữu ích trong đó trường hợp – pmarreck

Các vấn đề liên quan