Ответ 1
Это объясняется в Программе Phoenix:
Крис говорит: если не указано никаких параметров, мы не можем по умолчанию использовать пустую карту, потому что это будет неотличимо от отправки пустой формы. Вместо этого, мы по умолчанию params для атома: empty. По соглашению Ecto создаст недопустимый набор изменений с пустыми параметрами.
Итак :empty
используется в качестве заполнителя, чтобы мы могли различать пустую форму представления и не заданные параметры.
Как отмечает Штефан в комментарии ниже:
Обратите внимание, что с Ecto 2.0 он использует пустую карту:
def changeset(user, params\\%{}) do