セッションコントローラーにomniauth_create
アクションがあります。ユーザーをenter_email.html.erbというビューにリダイレクトし、一部をリダイレクトに渡します ( omniauthから取得):params
def omniauth_create
auth = request.env["omniauth.auth"]
user = User.from_omniauth(env["omniauth.auth"])
.
.
.
else
redirect_to(enter_email_path(oprovider: user.provider,
ouid: user.uid,
oname: user.name,
opassword: user.password,
opassword_confirmation: user.password))
end
end
非表示フィールド (基本的には登録フォーム) で使用される場所:
<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.hidden_field :provider, value: params[:oprovider] %>
<%= f.hidden_field :provider, value: params[:oprovider] %>
<%= f.hidden_field :uid, value: params[:ouid] %>
<%= f.hidden_field :name, value: params[:oname] %>
<%= f.hidden_field :password , value: params[:opassword] %>
<%= f.hidden_field :password_confirmation, value: params[:opassword_confirmation] %>
<% # To know to which form to redirect in case of validation error %>
<%= hidden_field_tag 'form_name', 'enter_email' %>
<%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
<% end %>
問題は、検証エラーが発生した場合です (たとえば、電子メールが既に取得されていたなど)。ビューがレンダリングenter_email
さparams
れ、隠しフィールド (値から) が消去されます。
したがって、データを渡す代わりにセッションredirect_to
にデータを保存することを考えていました。この方法でセッションを使用したことがないため、少し迷っています(データを保存する場合、隠しフィールドがまだ必要かどうかさえわかりません)セッション?)
誰でもヒントや例を教えてもらえますか?