2013-12-09 102 views
0

我有一个表,称为用户具有唯一的用户名,并有4个问题关于每个用户名,他们在注册时保存在mysql数据库中回答。我想要做的是做一个两步登录表单,其中的人在第一次输入用户名和密码,一旦点击提交,我从数据库中取回用户回答的问题之一,并将其​​作为第二步登录提供。我想要的第二个问题是随机采取的。另外我想跟踪不正确的尝试次数。但我坚持第二步,如何随机并检查不正确的登录尝试。需要一点帮助。我使用mysql作为后端并使用RoR。我的表看起来像这样从mysql获得随机值

Members 
{ username 
password 
question1 
question2 
question3 
question4 
answer1 
answer2 
answer3 
answer4 } 

而且所有的字段都是字符串!

+0

您可以将RoR部分的随机列名提供给mysql?想法,将所有列名称添加到数组中,并使用来洗牌并从RoR编码中获取随机列名称,并将该值传递给mysql查询。 –

+0

我有登录的第一部分的用户名,我想根据用户名从数据库中提取第二部分的随机问题,并验证答案@ user876345 – user9517536248

+0

您可以随时传递用户名和随机问题列吗? –

回答

0

以下代码生成随机数(100 - 500):

FLOOR(RAND() * 401) + 100 

一般地,FLOOR(RAND() * (<max> - <min> + 1)) + <min>生成之间和包容性的数字。

+0

但我想要从数据库中随机选择一个问题,而不仅仅是随机数@zaheer – user9517536248

0

如果你需要随机挑选问题的领域之一,访问属性为这样:

self.send("question#{(1..4).to_a.sample}") 

其中自我是你的成员实例。

如果您需要对'answer'进行相同的处理,这很可能是因为您必须验证用户的输入,那么这就需要一个更完整的实现。

my_random = (1..4).to_a.sample 
fail_count = 0 
question = self.send("question#{my_random}") #display to user 
if user_reply == self.send("answer#{my_random}") #validate against user's reply 
    p 'success' 
else 
    fail_count += 1 
end 
+0

.send是做什么的?发送数据到哪里?我想是否尝试并将此代码放入我的模型或视图或控制器中? – user9517536248

+0

'send'将字符串转换为您的实例的方法调用。有关更多详细信息,请参阅http://ruby-doc.org/core-2.0.0/Object.html#method-i-send。 – blotto

+0

已更新,以便更好地了解如何使用它,至于在何处放置它,您需要知道在表单呈现时要显示什么问题,因此您的控制器中的登录操作需要决定什么问题。一旦用户提交,你就可以验证他们的答案和为该用户存储的答案 – blotto