У меня есть схема Ecto, которая включает в себя field :owned_by_id, :string
. Я объявил поле строкой, потому что мне нужно поддерживать такие значения, как «abc123», а также значения типа «123».Почему «cast» Ecto не конвертирует целое число в строку?
docs for cast/3 говорят:
Второй аргумент представляет собой карту Params, что отлиты в соответствии с информацией типа от
data
.
В моем модуле я определяю changeset
как:
def changeset(struct, params \\ %{}) do
cast(struct, params, [:owned_by_id])
end
Когда я делаю это:
MyModule.changeset(%MyModule{}, %{owned_by_id: 1})
... Я бы ожидать cast
превратить этот owned_by_id
целочисленное параметров в строку , на основе декларации field
.
Однако то, что я получаю вместо является набор изменений, который включает в себя
errors: [owned_by_id: {"is invalid", [type: :string]}]
Я мог бы назвать Integer.to_string(1)
себя, но не должен cast
справиться с этим? Есть ли способ заставить это обрабатывать это автоматически?
Звучит как ошибка. –