2017-01-08 72 views
0

我有一個表格供用戶輸入信息。如果添加成功或不成功,我想要彈出一條消息(無需重定向頁面,就像AJAX調用一樣)。問題是,一個Plug.Conn.NotSentError錯誤出現put_flash沒有重定向或渲染?

模板:

<%= form_for @changeset, foo_path(@conn, :create), fn f -> %> 
    <div class="form-group"> 
    <%= text_input f, :email, placeholder: "Email", class: "form-control" %> 
    </div> 
    <%= submit "Subscribe!", class: "btn btn-primary" %> 
    <p><%= get_flash(@conn, :info) %></p> 
<% end %> 

控制器:

def create(conn, %{"user" => user_params}) do 
    changeset = User.changeset(%User{}, user_params) 
    case Repo.insert(changeset) do 
    {:ok, user} -> 
     conn 
     |> put_flash(:info, "Thank you!") 
    {:error, user} -> 
     conn 
     |> put_flash(:info, "An error occurred.") 
    end 
end 
+0

據我所知,您需要在放入閃光燈後重新渲染表格。 – JustMichael

回答

0

put_flash/3追加閃光消息的連接。該連接用於答覆。在你的情況下沒有答覆。您需要某種回覆才能將數據(包括Flash消息)傳輸回客戶端。

如果您只是想在當前網站上添加一條Flash消息,那麼人們通常會再次渲染相同的東西(通常該頁面包含一個表單)。 render conn, :new

另一種可能是使用ajax或頻道來獲得更流暢的體驗。在ajax的情況下,你可以使用javascript來顯示消息。在phoenix中,您可以渲染任何字符串以在控制器中給出適當的響應。所以你會說text conn, "your text, which can be json or not"。請參閱文檔here。 然後,您可以使用jquery來顯示您的Flash消息併發出請求。檢查their doc如何做到這一點。你可能想使用.done回調。

第三個選項(渠道)不是什麼東西,我會推薦這個任務,除非你有很多這些形式。