2013-01-18 3 views
-1

기본적으로 .txt 파일 내에서 무작위로 선택한 텍스트 줄을 출력하고 싶습니다. 이것은 내가 지금까지 생각 해낸 것이지만 실제로 아무것도보기에 표시되지 않습니다. .txt 인 파일에.txt 파일의 텍스트 줄을 무작위로 표시 | rails

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

:

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? 

에서 나는 레일의 컨트롤러 폴더

을 볼 게시물의 내부 후 Question.txt 파일을 배치 한 RAILS VIEW FILE :

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

Devise를 인증으로 사용한다는 것을 명심하십시오. 컨트롤러를 사용할 때 어떤 재미있는 일들이 계속되는 것을 읽었 기 때문에 이것을 말하고 있습니다. 그렇지만 완전히 확신 할 수는 없습니다. 단지 그것을 언급하고 있습니다.

그래서 게시물의 헬퍼 파일이나 게시물의 컨트롤러 파일에 "위의 컨트롤러"코드를 삽입해야하는지 잘 모르겠습니다. 또는 그 문제에 대한 다른 곳. 여기에 누군가 헬퍼 파일이나 컨트롤러 파일에서 배열을 참조하는 방법에 대한 아이디어가 있습니까?

보기에서 텍스트 줄을 임의로 출력 할 수는 있지만 어딘가에서 더 깔끔하게 배치하고 싶습니다. 파일이나 도우미 또는 컨트롤러 또는 그와 비슷한 것입니다.

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

답장을 보내 주셔서 감사합니다. : D

+0

(BUMP) (BUMP) – MFCS

답변

0

먼저 임의 질문 로직을 수행 할 모델을 만듭니다.

전체 파일을 메모리로 읽고 을 읽고 무작위 선을 선택한다고 가정합니다. 어떤 식 으로든 파일을 임의로 랜덤 화하고 파일을 적게 읽는 것이 더 효율적일 수 있습니다. 그러나 문제가 발생할 때까지는 최적화를 제안하지 않습니다.

따라서 파일을 메모리에 저장하려고한다고 가정하면이 파일을 메모리에 보관하고 두 번 이상 디스크에 갈 필요가 없습니다.

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

이제 컨트롤러 에 Question.random_question를 호출 할 수 있으며, 통화가 충분히 간결하기 때문에, 뷰에서 호출도, 인스턴스 변수에 그것을 설정하거나.

+0

디자인 결정의 일부는 시간이 지남에 따라 질문 모델의 역할이 확장 될 수 있으며 이제는 질문 개체가 인스턴스화 될 수있는 클래스를 갖게됩니다. 더 복잡한. –

+0

이것을 위해 정말로 새로운 클래스를 생성해야합니까? 어떻게 든 그걸 피할 ​​수 없니? 만약 내가 정말로 다른 곳에서보기에 배열을 더 편리하게 사용할 수 있다고 생각하지 않는다면? 또한 컨트롤러에서 왜이 작업을 수행 할 수 없습니까? : S – MFCS

+0

아니요, 새 클래스를 만들 필요가 없습니다. 더 좋은 디자인입니다. 컨트롤러,보기 또는 도우미의 코드로 작업 할 수 있지만 모델에 가장 적합한 장소가됩니다. 이것은 MVC 패턴을 따르고 있습니다 (http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller). –

관련 문제