在会话中存储用户数据并稍后在表单中使用它(Rails)?

时间:2012-11-06 23:57:00

标签: ruby-on-rails session

我的会话控制器中有omniauth_create个动作。它会将用户重定向到名为 enter_email.html.erb 的视图,并将一些params传递给重定向(从omniauth获取):

  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_emailparams从隐藏字段(从值)中消失。

所以我考虑将数据存储在会话中而不是用redirect_to传递它我从未使用过这种方式的会话,所以我有点迷失(我是如果我在会话中存储数据,我甚至不确定是否仍然需要隐藏字段?)

任何人都可以给我一个提示或示例吗?

0 个答案:

没有答案