no case子句匹配::在文件上传的cast_attachments的变更集中出现空错误

时间:2017-02-11 12:56:13

标签: elixir phoenix-framework ecto

我有以下模型,对于我正在使用Arc模块进行上传的图像

  defpodule Chemical.Info do       使用Chemical.Web,:model

schema "infos" do
    field :title, :string
    field :shortdesc, :string
    field :longdesc, :string
    field :images, Chemical.ImageUploader.Type
    field :regions, :string
    field :startdate, :date
    field :enddate, :date
    field :status, :string
    field :createdby, :string
    field :approvedby, :string

    timestamps()
end

@required_fields ~w(title shortdesc startdate enddate )
@optional_fields ~w(longdesc regions status createdby approvedby)
@required_file_fields ~w()
@optional_file_fields ~w(images)

   def changeset(model, params \\ :empty) do
    model

    |> cast(params, @required_fields, @optional_fields)
    |> cast_attachments(params, @required_file_fields, @optional_file_fields )

end 
     

控制器中的新功能

def new(conn, _params) do
    changeset = Info.changeset(%Info{})
    render conn, "new.html", changeset: changeset
end

在访问返回新表单的/ new操作时,我在cast_attachments函数调用中收到以下错误

  

没有case子句匹配:: empty

如果我删除了cast_attachments行,它会显示新表单。 Arc版本为0.6.0,arc_ecto为0.5.0。 我正在使用本地存储,因此Arc生成了默认上传器。

1 个答案:

答案 0 :(得分:1)

自Ecto 2.0起,不推荐将:empty作为params传递,而采用空地图(%{})。看起来arc_ecto 0.5.0不再允许发送:empty而不是发出警告。您需要将:empty更改为%{}作为params的默认值:

def changeset(model, params \\ :empty) do

- >

def changeset(model, params \\ %{}) do