2016-03-02 28 views

Trả lời

8

Chức năng timestamps/1 chấp nhận danh sách từ khóa tùy chọn, bạn có thể đặt giá trị mặc định bằng danh sách này.

def change do 
    alter table(:channels) do 
    timestamps default: "2016-01-01 00:00:01", null: false 
    end 
end 


CẬP NHẬT Ecto> = 2.1
Bạn sẽ cần phải sử dụng các loại mới NaiveDateTime

def change do 
    alter table(:channels) do 
    timestamps default: ~N[2017-01-01 00:00:01], null: false 
    end 
end 

Nếu bạn có nhiều nghi ngờ có một cái nhìn tại documentation

+0

Ecto 2.0 đã loại bỏ tùy chọn này :(Có lẽ giải pháp tốt nhất là thêm cả hai trường theo cách thủ công. –

+2

Giải pháp ban đầu hoạt động trong Ecto 3.2 ngay bây giờ :) ... 'dấu thời gian mặc định:" 2016-01-01 00:00:01 ", null: false' - đó là câu trả lời chưa được cập nhật ban đầu. –

0

Tôi đoán bạn nhận được điều này khi bạn đang cố gắng để cập nhật một kỷ lục, tôi có thể nghĩ 2 giải pháp có thể bạn có thể hoặc chạm vào cột inserted_at trong bảng của bạn bằng cách chạy một truy vấn UPDATE hoặc thêm một chức năng để mô hình ecto của bạn như vậy

def create_changeset(model, attrs) do 
    model 
    |> cast(attrs, @required_fields, @optional_fields) 
    |> update_inserted_at 
    end 

    defp update_inserted_at(changeset) do 
    # check if the updated field is null set a new date 
    end 
Các vấn đề liên quan