随机显示.txt文件中的文本行轨道

时间:2013-01-18 14:30:05

标签: ruby-on-rails arrays text random devise

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

在铁路控制器中:

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

1 个答案:

答案 0 :(得分:0)

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

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

因此,假设您确实希望将文件存储在内存中,请将其保留在内存中 而不必多次去磁盘。

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

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