我正在学习rails,并创建一个简单的问题/答案应用程序来测试我已经介绍过的一些概念。我使用生成脚手架来创建两个模型类 - 问题和用户。
问题表由question_number(int),question_text(string)和answer_text(string)组成。
users表有一个uid(字符串),name(字符串)和current_question(int)
然后我创建了一个名为gateway的控制器。我现在正在使用该应用程序,用户可以转到主页面,将其UID作为参数传递(最终将通过登录功能传递),应用程序将通过抓取与之匹配的question_number来显示他们当前正在处理的问题用户的current_question。大。
然后我在网关控制器中创建了一个答案方法。此方法将用户键入答案并将其与数据库中的答案进行比较,并根据答案是对还是错将用户重定向到不同的页面。
我的问题 - 我在索引方法中设置实例变量来设置当前用户和当前问题 - 但这些不会持久存在我的回答方法中。这里的Rails最佳实践是什么?我:
1)通过表单将这些作为参数传递给答案方法,就像我传递答案一样(当我已经在控制器中创建实例变量时,似乎效率低下,现在将它们传回...) 2)将这些作为变量存储在会话中? 3)将它们存储在Flash中? 4)在答案方法中再次查找它们(不喜欢重复代码,2个相同信息的调用似乎很浪费)
我甚至为这个应用使用了正确的结构吗?在这种情况下你会做什么,你想要获取用户的属性(他们当前的授权问题)并多次使用它来查询数据库的另一部分(步骤1 - 获得与用户的授权问题相匹配的问题,步骤2 - 检查答案用户输入是否正确,步骤3 - 增加用户的验证问题计数器)
没有用于会话处理的插件。基本上,我的流程是这样的:
答案 0 :(得分:3)
将它存储在会话中听起来很合适,具体取决于您想要多少安全性。
在rails3中,会话实际上存储在cookie本身中,并且大小有限。 如果变量是大对象,那么在数据库中创建一个表,只需将id存储在会话中,每次都要查找。
或者,您可以使用memcached或等效文件存储会话,然后cookie只存储会话ID。
答案 1 :(得分:0)
我可能误解了你的问题,但通常的程序是:
你是否使用插件进行会话处理(Devise,Authlogic等)?