2016-03-21 4 views
2

文書化されていません。これは(ノー対応するビュー、単にデフォルト1を持つ)問題のコントローラのアクション:フェニックスフレームワーク:未定義の機能LetsPlan.Event.fetch/2。しかしフェッチ機能はどこでも

[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機能:

def show(conn, %{"id" => id}) do 
    event = Repo.get_by!(Event, slug: id) 
    render conn, "show.html", event 
    end 

フェニックスで失敗どこにも文書化されておらず、私のコードは決してそれを呼びません!

答えて

6

エラーは、表示するモデルを直接渡すとしているため、この関数は第三引数として「割り当て」を想定し、表示されます。割り当ては地図でなければなりません。

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

レイアウトビューでも、これはto check for some fieldsを割り当て使用しています:あなたはまだ見解を持っていない場合でも、それは、レイアウトビュー「app.html」を評価し始めました。終わり

、あなたはそれが割り当てたマップではないので、あなたが渡され、それが失敗したものにDict.fetchを呼び出そうとしています。これを代わりに試してみてください:

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

これは値があなたのモデルであるキーを:eventにします。これで、コントローラのビューを実装するよう別のエラーメッセージが表示されるようになりました。

エリクサーは、動的型付け、あなたが間違った型を提供する場合、それは時々深いスタックダウン不可解なエラーが発生しています。このような場合には、実際に期待するかどうか確認するためのライブラリのソースコードをチェックするのに便利です。

+0

うわー、これは私の一部にダムでした。解明してくれてありがとう! – rubik

関連する問題