使用通配符路由资源

时间:2016-04-26 13:03:18

标签: phoenix-framework

我有这个路由

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

1 个答案:

答案 0 :(得分:0)

函数init/1https://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