可怕的冗余凤凰控制器

Krz*_*nde 5 elixir ecto phoenix-framework

我正在做我的第一个凤凰应用程序,并试图做新的/ 2控制器.我写的代码是

def new(conn, %{"fbid" => fbid, "latitude" => lat, "longitude" => lng, "content" => content}) do
    {fbid, _} = Integer.parse(fbid);
    {lat, _} = Float.parse(lat);
    {lng, _} = Float.parse(lng);

    chats = %Chat{:fbid => fbid, :latitude => lat, :longitude => lng, :content => content}
      |> Repo.insert
      |> List.wrap
      |> Poison.encode!
    render conn, chats: chats
end
Run Code Online (Sandbox Code Playgroud)

但它看起来非常多余,我找不到更好的方法来做到这一点.我已经读过没有办法将Map转换为Struct,并且由于params的类型不同,所以它无论如何都无法工作.

那么有人能告诉我一些神奇的方式来映射它吗?

Jos*_*lim 5

请根据您的模型信息查看Ecto变更集.他们将负责所有的解析,验证等.

我的建议是使用其中一个mix phoenix.gen.htmlmix phoenix.gen.json生成一些样本结构,以便您快速了解所有部分如何组合在一起:

mix phoenix.gen.html Chat chats fbid:integer latitude:float longitude:float content:string
Run Code Online (Sandbox Code Playgroud)

请注意,如果您已经定义了Chat模型,则生成器将与上面的代码冲突.

  • 生成器不在那里生成您的整个应用程序,它是一个学习工具,向您展示如何构建您的代码.您不需要在一天结束时使用它,但是看一下至少生成一次的内容,以了解在Phoenix中构建CRUD所需的概念. (3认同)