我尝试创建连接表,并且在尝试构建结构时遇到此错误。
协议可用于%Statcasters.UsersLeagues { meta :#Ecto.Schema.Metadata<:built," users_leagues">,专员:nil,id:nil ,inserted_at:nil,league:#Ecto.Association.NotLoaded,league_id:nil,updated_at:nil,user:#Ecto.Association.NotLoaded,user_id:nil}。此协议实现为:DBConnection.PrepareStream,DBConnection.Stream,Date.Range,Ecto.Adapters.SQL.Stream,File.Stream,Function,GenEvent.Stream,HashDict,HashSet,IO.Stream,List,Map,MapSet, Postgrex.Stream,Range,Stream,Timex.Interval
它在这条线上失败了:
def new(conn, _params) do
changeset = League.changeset(%League{users_leagues: %UsersLeagues{}})
render(conn, "new.html", changeset: changeset)
end
我与联盟和用户有着很好的关系。连接表是users_leages表,这是我尝试在新操作中创建的。但是当我尝试加载新页面时。它打破了这个错误。
答案 0 :(得分:3)
错误意味着Ecto尝试将字段users_leagues
的值用作%UsersLeagues{}
不是{1}}的枚举。由于该字段是has_many
字段,因此记录可以包含许多字段,并且它必须是%UsersLeagues{}
结构的列表(或更具体地说是可枚举的字段)。
您可以通过将%UsersLeagues{}
包装在列表中来解决此问题:
changeset = League.changeset(%League{users_leagues: [%UsersLeagues{}]})