我为酒类品牌建立了一个营销网站,我需要通过添加目标网页来检查用户的年龄,然后才能进入主网站。在我现有的rails应用程序中处理表单,提交和验证功能的最佳方法是什么?
我应该创建一个原始html表单并使用javascript吗?
答案 0 :(得分:1)
添加before_action
到ApplicationController
,检查验证是否已经发生(例如,如果它存储在cookie中,然后检查cookie等):
class ApplicationController
before_action :check_age
def check_age
# check if the user has already confirmed their age.
end
...
end
如果没有找到,请将用户重定向到控制器操作,该操作会呈现带有年龄检查表单的页面(即AgeVerificationController#new
)
提交后,设置cookie(或您正在进行的任何存储此数据的操作),并将用户重定向回他们打算访问的页面(如果他们说他们未成年,则将其踢出网站!)
您需要在用于处理表单呈现和提交的控制器上包含skip_before_action
,即
class AgeVerificationController < ApplicationController
skip_before_action :check_age
...
end`
如果你开始使用它来做很多复杂的事情,使用before_action
有时会有点反模式,但在这种情况下,它是一种相当简单的方法来做你想做的事情。
答案 1 :(得分:0)
即使您使用javascript,也需要存储来宾的年龄,以便下次帮助他获得更好的用户体验。所以我建议您将其与ip保存在一起 - 如果您没有存储用于登录的唯一参数(例如电子邮件,手机号码等),则可以识别来宾。 准备好表格后存储此详细信息...您有很多选项,例如: -
第二个选项是让用户访问该页面并在中间显示模式窗口弹出窗口,在页面加载后五秒钟后使用settimeout调用ajax反过来,它将调用一个控制器方法来渲染js文件,该文件将调用一个模态,如$(".myModal").show();
或渲染您自己的视图以获取用户详细信息,如:
$('#myModal').find('.modal-body').html("<%= escape_javascript(render(:partial => 'users/get_details')) %>");
$('#myModal').modal();