ruby-on-rails - Rails - 如何在 Controller 方法之间保留实例变量

标签 ruby-on-rails instance-variables

我正在学习 Rails,并创建一个简单的问答应用程序来测试我所了解的一些概念。我使用生成脚手架创建两个模型类 - 问题和用户。

问题表由question_number(int)、question_text(string)和answer_text(string)组成。

users 表有 uid(字符串)、name(字符串)和 current_question(int)

然后我创建了一个名为 gateway 的 Controller 。我的应用程序现在正在运行,用户可以进入主页,将其 UID 作为参数传递(最终将通过登录函数传递),并且应用程序将通过抓取与用户的当前问题。太棒了。

然后我在网关 Controller 中创建了一个应答方法。此方法将用户在表单中输入的答案与数据库中的答案进行比较,根据答案是对还是错将用户重定向到不同的页面。

我的问题 - 我在索引方法中设置实例变量来设置当前用户和当前问题 - 但这些不会持续到我的答案方法中。 Rails 的最佳实践是什么?我是:

1)通过表单将这些作为参数传递给答案方法,就像我传递答案一样(当我已经在 Controller 中创建了实例变量,现在将它们传递回来时,这似乎效率低下......) 2)将它们存储为 session 中的变量? 3)将这些存储在Flash中? 4)只需在答案方法中再次查找它们(不喜欢重复代码,并且两次调用相同信息似乎很浪费)

我是否为这个应用程序使用了正确的结构?在这种情况下,您想要获取用户的属性(他们当前的授权问题)并多次使用它来查询数据库的另一部分(步骤 1 - 获取与用户的授权问题匹配的问题,步骤 2 -检查用户输入的答案是否正确,第 3 步 - 增加用户的身份验证问题计数器)

更多信息,@wukerplank

没有用于 session 处理的插件。基本上,我的流程是这样的:

  1. “登录”用户(这个小测试应用程序中没有登录逻辑,因此我只是将 uid 作为 URL 中的参数传递)
  2. 网关 Controller 通过 @question = Question.where(:question_number => @user.current_question).first 获取用户当前的问题
  3. 用户会看到问题文本和输入答案的表单
  4. “提交”按钮调用我的 :answer 操作并传递答案字符串
  5. 在这里,我很想再次调用@question,但不能,因为它没有被持久化。所以我要么必须重复步骤2,要么找到一个地方来存储我需要再次引用的数据。我假设 Rails 的 DRY 原则建议不要重复步骤 2,所以我想知道存储这些(以及我可能需要的其他变量)的最佳方法在哪里/如何 谢谢!

最佳答案

听起来将其存储在 session 中是合适的,具体取决于您想要的安全程度。

在rails3中, session 实际上存储在cookie本身中,并且大小有限。 如果变量是大对象,则在数据库中创建一个表,并将 id 存储在 session 中并每次查找它。

或者,您可以使用 memcached 或等效工具来存储 session ,然后 cookie 只存储 session ID。

关于ruby-on-rails - Rails - 如何在 Controller 方法之间保留实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5543741/

相关文章:

ruby-on-rails - 命名范围不与时区合作?

ruby-on-rails - 连接到 PostgreSQL 数据库时出现 Rails 问题

ruby-on-rails - Rails 3.1 ActionMailer 自定义模板路径?

IOS分配的对象在这个执行路径后面没有被引用保留计数+1

java - 编程作业;构造函数 -> 表达式开头无效 + 分号困扰

Java:实例访问和输入System.in

css - Font Awesome 图标对齐

ruby-on-rails - 尝试安装 Rails 时,执行 gem ... (Gem::RemoteFetcher::FetchError) 503 错误

ruby 风格和实例变量

python - 实例变量 Python 的类型提示约定