用于JSON的Phoenix框架router.ex配置

时间:2015-09-05 01:23:45

标签: elixir phoenix-framework elixir-framework

我通过mix phoenix.gen.json V1.Post posts title:string content:string secret:string --no-model安装了phoenix JSON包 但得到了这个错误:

== Compilation error on file web/controllers/v1/post_controller.ex ==
** (CompileError) web/controllers/v1/post_controller.ex:14: Shopper.V1.Post.__struct__/0 is undefined, cannot expand struct Shopper.V1.Post
(elixir) src/elixir_map.erl:55: :elixir_map.translate_struct/4
(stdlib) lists.erl:1353: :lists.mapfoldl/3
(elixir) src/elixir_clauses.erl:36: :elixir_clauses.clause/7
(elixir) src/elixir_def.erl:178: :elixir_def.translate_clause/7
(elixir) src/elixir_def.erl:167: :elixir_def.translate_definition/8
(elixir) src/elixir_def.erl:82: :elixir_def.store_definition/9
web/controllers/v1/post_controller.ex:13: (module)
(stdlib) erl_eval.erl:669: :erl_eval.do_apply/6

这是我的router.ex代码:

defmodule Shopper.Router do
use Shopper.Web, :router

pipeline :api do
    plug :accepts, ["json"]
end

scope "/", Shopper do
    pipe_through :api
    resources "/v1/posts", V1.PostController
end
end

从文件中说:

  

将资源添加到web / router.ex中的适当范围:

     
    

资源" / posts",PostController

  

但是......我无法让它发挥作用,有人可以帮助我吗?谢谢。

请注意,这适用于凤凰1.0和elixir 1.0。

1 个答案:

答案 0 :(得分:0)

我的问题是指出错误的问题,但我会保持这种方式,这样它可以帮助那些得出类似结论的人。

解决方案是为V1.Post添加模型,但运行mix phoenix.gen.model将产生编译错误,已在我的问题中说明。所以,我必须评论有问题的代码,它是V1.Post控制器中的整个def create(conn, %{"post" => post_params})

在运行mix phoenix.gen.model V1.Post posts name:string之后,取消注释违规代码。

要进行测试,请运行mix phoenix.routes,在我的情况下返回

Compiled web/models/v1/post.ex
Generated shopper app
page_path  GET     /                  Shopper.PageController :index
post_path  GET     /api/v1/posts      Shopper.V1.PostController :index
post_path  GET     /api/v1/posts/:id  Shopper.V1.PostController :show
post_path  POST    /api/v1/posts      Shopper.V1.PostController :create
post_path  PATCH   /api/v1/posts/:id  Shopper.V1.PostController :update
           PUT     /api/v1/posts/:id  Shopper.V1.PostController :update
post_path  DELETE  /api/v1/posts/:id  Shopper.V1.PostController :delete

成功!