我有这个路由
scope "/api", MosaicApi do
pipe_through :api
# resources "/cards", CardController, except: [:new, :edit]
resources "/estimates/:product", EstimateController, except: [:new, :edit]
最初我使用生成的CardController和工作(至少POST /创建),但现在我想概括为Card是一种产品类型,我有各种其他产品需要公开完全相同的CRUD操作。所以我试图将Card *变为估计*
在EstimateController中我现在有了这个
defmodule Api.CardController do
use Api.Web, :controller
alias Api.Card
def create(conn, %{"product" => product}) do
conn
|> render("result.json", product: product)
end
...
我想要做的是在产品上进行模式匹配以将相关的结构(卡片,...)纳入范围,但是由于上面的代码产生了这个错误,我已经卡住了
未定义的函数Api.EstimateController.init / 1(模块Api.EstimateController不可用) Api.EstimateController.init(:创建)
我感到困惑,http://www.phoenixframework.org/docs/controllers根本未提及init
其他迹象表明事情基本上是好的
mix phoenix.routes
page_path GET / Api.PageController :index
estimate_path GET /api/estimates/:product Api.EstimateController :index
estimate_path GET /api/estimates/:product/:id Api.EstimateController :show
estimate_path POST /api/estimates/:product Api.EstimateController :create
答案 0 :(得分:0)
函数init/1
在https://github.com/phoenixframework/phoenix/blob/v1.1.4/lib/phoenix/controller/pipeline.ex#L98
def init(action) when is_atom(action) do
action
end
您似乎没有在use Phoenix.Controller
中致电EstimatesController
。
通常可以通过以下方式完成:
use Api.Web, :controller