id}) do event = Repo.ge-6ren">
gpt4 book ai didi

elixir - Phoenix 框架 : undefined function LetsPlan. Event.fetch/2。但是 fetch 函数没有在任何地方记录

转载 作者:行者123 更新时间:2023-12-02 06:17:18 27 4
gpt4 key购买 nike

这是有问题的 Controller 操作(没有相应的 View ,只有默认 View ):

  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 函数未在任何地方记录,我的代码从未调用它!

最佳答案

出现错误,因为您直接将模型传递给 View ,并且此函数需要“分配”作为第三个参数。分配应该是一张 map 。即使您还没有 View ,它也会开始评估布局 View “app.html”:

(lets_plan) web/templates/layout/app.html.eex:11: LetsPlan.LayoutView."app.html"/1

布局 View 也使用此分配 to check for some fields .

最后,您尝试对您传递的内容调用 Dict.fetch 但失败,因为它不是带有分配的映射。试试这个:

render conn, "show.html", event: event

它创建一个关键的 :event ,其值为您的模型。现在您可能会收到不同的错误提示您实现 Controller 的 View 。

Elixir 是动态类型的,当您提供错误的类型时,有时会导致堆栈深处的神秘错误。在这种情况下,检查库源代码以检查它实际期望的内容很有用。

关于elixir - Phoenix 框架 : undefined function LetsPlan. Event.fetch/2。但是 fetch 函数没有在任何地方记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36139812/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com