协议可枚举未针对MyApp.MyStruct实现

时间:2017-12-08 00:40:03

标签: elixir phoenix-framework

我尝试创建连接表,并且在尝试构建结构时遇到此错误。

错误

协议可用于%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

它在这条线上失败了:

LEAGUE CONTROLLER:

  def new(conn, _params) do
    changeset = League.changeset(%League{users_leagues: %UsersLeagues{}})

    render(conn, "new.html", changeset: changeset)
  end

我与联盟和用户有着很好的关系。连接表是users_leages表,这是我尝试在新操作中创建的。但是当我尝试加载新页面时。它打破了这个错误。

1 个答案:

答案 0 :(得分:3)

错误意味着Ecto尝试将字段users_leagues的值用作%UsersLeagues{}不是{1}}的枚举。由于该字段是has_many字段,因此记录可以包含许多字段,并且它必须是%UsersLeagues{}结构的列表(或更具体地说是可枚举的字段)。

您可以通过将%UsersLeagues{}包装在列表中来解决此问题:

changeset = League.changeset(%League{users_leagues: [%UsersLeagues{}]})