【问题标题】:Randomly display line of text from .txt file | rails随机显示 .txt 文件中的文本行 |导轨
【发布时间】:2013-01-18 14:30:04
【问题描述】:

基本上我想在 .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

【问题讨论】:

  • (BUMBING 这个问题)(BUMP)(BUMP)

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 部分设计决策是您的问题模型的角色可能会随着时间的推移而扩展,现在您有一个可以实例化问题对象的类,如果问题变得更加复杂。
  • 我真的需要为此创建一个新类吗?我不能以某种方式避免这种情况吗?如果我真的不能,您认为我可以如何更方便地在其他地方使用视图中的数组?另外为什么我不能在控制器中这样做? :S
  • 不,你不需要创建一个新类,如果你这样做是一个更好的设计。你可以让它与控制器、视图或助手中的代码一起工作,但最好的地方是模型。这符合 MVC 模式 (en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)。
  • 咳咳咳,记住我在这里是菜鸟级别,所以我真的只将它放在控制器中,我现在必须在你提供给我的那个中添加一些额外的代码吗?跨度>
  • #<0x3252cc0>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多