当我从表单中获取参数,然后使用 Multi.insert(:insert, game)
;
value `"12"` for `Server.Sample.Game.team_id` in `insert` does not match type :id
我得到的参数是这样的。然后把 team_id
在游戏地图上。
game = %Game{team_id: attrs["team_id"], ....}
Multi.new()
|> Multi.insert(:insert, game)
|> Repo.transaction()
当然,我认为错误类型team_id应该是整数,而不是字符串。我的问题是,如果有很多字符串,我是否应该将字符串转换为整数?
我想找到最好的方式转换为整数的每个项目。
谢谢。
就像Ashley说的,你可以用一个自定义函数来使用变化集,就像这样。
def changeset(struct, params) do
struct
|> cast(params, [:name]) # your fields
|> team_id_to_integer()
end
def team_id_to_integer(changeset) do
team_id = get_field(changeset, :team_id)
if is_bitstring(team_id) do
put_change(changeset, :team_id, String.to_integer(team_id)
else
changeset
end
end