-1

基本的に、ランダムに選択されたテキスト行を .txt ファイル内に出力したいと考えています。これは私がこれまでに思いついたものですが、ビューに実際に表示されるものは何もありません。投稿ビューフォルダー内に question.txt ファイルを配置しました

Railsコントローラーで:

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?

Railsビューファイルで:

<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 に答える