2016-11-27 4 views
2

でいないレイアウトと私のエラービューをレンダリングすることができません:私はレイアウトすることなく、私のエラービューをレンダリングしたいフェニックス/エリクシール

defmodule MyApp.ErrorView do 
    use MyApp.Web, :view 

    def render("404.html", assigns) do # renders my_404.html.eex template 
    render(__MODULE__, "my_404.html") 
    end 

とアクション:

def my_action(conn) do 
    if something_wrong do 
    conn 
    |> put_status(404) 
    |> render(MyApp.ErrorView, "404.html") 


    # conn 
    # |> put_status(404) 
    # |> put_layout(false) 
    # |> put_view(MyApp.ErrorView) 
    # |> render("404.html") 

しかし、それは動作しません。私の主なアプリケーションテンプレートをレンダリングします。コードの2番目の部分のコメントを外して1番目のコメントをコメントアウトすると、永遠にハングして何も表示されません。

また、私は私が私のコントローラのすべての各アクションからput_layout(false)を呼び出すためにしたくないので、私のErrorViewlayout falseを設定できるようにしたいです。

+0

'conn |> put_status(404)|> put_layout(false)|> render(MyApp.ErrorView、" 404.html ")'? – Dogbert

+0

@Dogbert、私はそれを試みます。しかし、私は各アクションから 'put_layout(false)'を呼びたくないので、私は** ErrorView **にレイアウト(false)を入れたいと思っています。どうやってやるの? – Kooooro

+0

@Dogbert、はい、うまくいきますが、これが欲しいです - それぞれのアクションからput_layout(false)を呼びたくないので、私はErrorViewにレイアウト(false)を入れたいと思っています。どうやってやるの?また、 – Kooooro

答えて

0

のいずれかに私は何をするだろうことは、次のようになります。

  • は、例えば、すでに定義されており、404にplug_statusフィールドが設定されているされた例外を発生させますEcto.NoResultsError

  • 同じ

     
    defmodule WhoopsyError do 
        defexception [:message, :plug_status] 
    
        def exception(_) do 
        %__MODULE__{message: "Whoopsy!", plug_status: 404} 
        end 
    end 
    

を行い、独自の例外モジュールを定義フェニックスは引き継ぎ、テンプレートなしであなたのためのエラービューをレンダリングします。

関連する問題