【发布时间】:2016-03-22 04:03:56
【问题描述】:
这是有问题的控制器动作(没有对应的视图,只有默认视图):
def show(conn, %{"id" => id}) do
event = Repo.get_by!(Event, slug: id)
render conn, "show.html", event
end
Phoenix 失败:
[error] #PID<0.633.0> running LetsPlan.Endpoint terminated
Server: localhost:4000 (http)
Request: GET /events/Evv_YCX71c
** (exit) an exception was raised:
** (UndefinedFunctionError) undefined function LetsPlan.Event.fetch/2
(lets_plan) LetsPlan.Event.fetch(%{__meta__: #Ecto.Schema.Metadata<:loaded>, __struct__: LetsPlan.Event, conn: [...snip...] :conn)
(phoenix_html) lib/phoenix_html/engine.ex:92: Phoenix.HTML.Engine.fetch_assign/2
(lets_plan) web/templates/layout/app.html.eex:11: LetsPlan.LayoutView."app.html"/1
(phoenix) lib/phoenix/view.ex:344: Phoenix.View.render_to_iodata/3
(phoenix) lib/phoenix/controller.ex:633: Phoenix.Controller.do_render/4
(lets_plan) web/controllers/event_controller.ex:1: LetsPlan.EventController.action/2
(lets_plan) web/controllers/event_controller.ex:1: LetsPlan.EventController.phoenix_controller_pipeline/2
(lets_plan) lib/phoenix/router.ex:261: LetsPlan.Router.dispatch/2
(lets_plan) web/router.ex:1: LetsPlan.Router.do_call/2
(lets_plan) lib/lets_plan/endpoint.ex:1: LetsPlan.Endpoint.phoenix_pipeline/1
(lets_plan) lib/plug/debugger.ex:93: LetsPlan.Endpoint."call (overridable 3)"/2
(lets_plan) lib/phoenix/endpoint/render_errors.ex:34: LetsPlan.Endpoint.call/2
(plug) lib/plug/adapters/cowboy/handler.ex:15: Plug.Adapters.Cowboy.Handler.upgrade/4
(cowboy) src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4
这个fetch/2 函数没有记录在任何地方,我的代码从不调用它!
【问题讨论】: