Rails:错误后记住设备注册表中的用户输入

时间:2014-05-07 11:53:20

标签: ruby-on-rails ruby-on-rails-3 devise

我使用Rails 3.2.16并设计3.2.2。

我已将(隐藏)字段account_level添加到我的设计注册表单中。这由URL中的查询字符串填充,具体取决于用户选择的计划。

如果用户在注册表单中出现错误,例如密码不匹配或未填写必填字段,则注册页面会重新加载并显示错误。但是,account_level字段现在为空,并且网址上没有查询字符串供我从中提取数据。

我怎样才能有轨道"记得"如果发生错误,页面重新加载后该字段中的内容是什么?

奖金健全性检查问题:是否有更好的方法来传递用户在注册时选择的计划?

----------- 更新 -----------
我结合使用了Shamsul和aelor的答案。我最终抓住查询字符串的值并使用javascript将其保存在cookie中。如果页面然后从验证错误重新加载,并且URL上的查询字符串不再存在,我会查找已设置的cookie并从中获取值以填充隐藏字段。
我想在前端尽可能多地保留,这就是我选择JS解决方案的原因。我还觉得,饼干是一种比本地存储更加经过试验和测试的。

2 个答案:

答案 0 :(得分:1)

使用localStorage。

您可以在用户点击时保存您的计划。

localStorage.setItem('plan','premium');

然后你可以检查项目并填写隐藏的字段。

if(localStorage.getItem('plan') != null){
   $('#hiddeninput').val(localStorage.getItem('plan'));
}

您可以随时使用

删除该计划
localStorage.removeItem('plan');

答案 1 :(得分:1)

在devise的registrations_controller.rb中

account_level 字段存储在Cookie中

def new
  if params[:account_level]
   cookies[:account_level] = params[:account_level]
  end
  #other code
end

def create
  if resource.save
    unless cookies[:account_level].nil?
     cookies.delete(:account_level)
     #do other coding
    end

  end
end

这样,重新启动页面后 account_level 字段不会为空。