2016-06-25 12 views
0

私は、ユーザーがログインに生成されたセッション、持っている:。エリクシール/フェニックス変更セッションキー

defp sign_in(user, password, conn) do 
    if password == user.password do 
    conn 
    |> put_session(:current_user, %{id: user.id, username: user.username, role_id: user.role_id, language: 1}) 
    |> put_flash(:info, "Signed in successfully!") 
    |> redirect(to: page_path(conn, :tableshow)) 
    else 
    failed_login(conn) 
    end 
end 

と、ログイン時にデフォルトで1に割り当てられていることをキー「言語」しかし、のヘッダーにlayout/app.html.eexキーの値を2に変更するためのボタンを作成しようとしています。どのようにしてキーの値を変更できますか?私はPlug.Connを読んだことがありますが、まだ分かっていません:(基本的には、言語切り替えをしたいので、セッション "言語"キーが1の場合、2、中国語の英語になります。 事前に感謝!

ボタンは、単にコントローラのアクションでこれを実行する上でクリックされた構文

update_map = %{current_map | :key_to_update => value} 

を使用して、必要に応じ

答えて

1

セッション変数:current_userはちょうどマップなので は、あなたがマップを更新する必要があります。

conn = put_session(conn, :current_user, 
%{get_session(conn, :current_user) | language: lang_value}) 
+0

お返事ありがとうございますが、私には1つの問題があります。このボタンが必要ですすべてのページのヘッダーにあり、layout/app.html.eexに入れて、どのコントローラを使うべきですか?私はコントローラで値を操作する方法を理解していますが、app.html.eexで必要なので、どのコントローラを使用するのかよくわかりません。どうぞお勧めですか? – Ilya

+0

私は 'session controller'という新しいコントローラを作成してそこにコントローラのアクションを配置することをお勧めします。コントローラのアクションに' change_language'という名前を付けることができます – coderVishal

関連する問題