-1

基本上我想在 .txt 文件中输出随机选择的文本行。到目前为止,这是我想出的,但没有任何东西真正显示在视图中。我已将 questions.txt 文件放在帖子视图文件夹中

在导轨控制器中:

class PostsController < ApplicationController
  def text_randomize
    t = IO.readlines("questions.txt")
    @random_question = t.sample
  end
end

在 .TXT 文件中:

How are you?
How is the weather at your place?
How are you my pal?
I wish I was a donkey, do you?
How do you do?

在导轨视图文件中:

<div id = "questions">
  <%= @random_question %>
</div>

请记住,我使用 Devise 作为身份验证,我告诉你这是因为我已经读到在使用控制器时会发生一些吸引人的事情,但是我并不完全确定,因此我只是提到它。

所以我不确定我是否应该将“ABOVE CONTROLLER”代码放在帖子的帮助文件或帖子的控制器文件中。或者其他地方。除此之外,这里是否有人知道如何从帮助文件或控制器文件中引用数组?

我可以直接从视图中随机输出一行文本,但我想在其他地方,更整洁的地方。就像在文件中或在帮助程序或控制器中或类似的东西中。

<%= ["Hello, how are you?", "How is the weather?", "Are you feeling good?"].sample %>

在您回答之前先谢谢!:D

4

1 回答 1

0

首先,创建一个模型来执行您的随机问题逻辑。

我假设您要将整个文件读入内存,然后选择一个随机行。以某种方式随机化您将在文件中读取的位置并减少读取文件的内容可能会更有效。但是,我不建议在您遇到问题之前对其进行优化。

因此,假设您确实希望将文件保存在内存中,让我们将其保存在内存中,而不必多次访问磁盘。

class Question
  def self.random_question
    @all_questions ||= IO.readlines("questions.txt")
    @all_questions[rand(@all_questions.size)]
  end
end

现在您可以在控制器中调用 Question.random_question 并将其设置在实例变量中,甚至可以从视图中调用它,因为调用已经足够简洁了。

于 2013-01-18T15:24:44.520 回答