2017-11-30 3 views
1

조리법 웹 앱을 만들려고합니다. 그것은 일종의 "게임"입니다. 각 사용자는 조리법을 좋아할 가능성이 있습니다. 처음에는이 것이 비어있는 것처럼 보입니다. 그리고 나서, 사용자는 각 시간 (또는 30 분) 간격으로, 조리법의 각 단계를 수신하기로되어 있습니다.레일에서 특정 게시물 간의 시간 간격을 만드는 방법은 무엇입니까?

def index 
@recipe = Recipe.find(params[:recipe_id]) 
@steps = @recipe.steps 
end 

그리고 내 인덱스 단계보기에 표시 할 것입니다 : 내가 가진

class Recipe < ApplicationRecord 
belongs_to :user 
has_many :steps 
has_many :favorites 
has_many :favorited_by_users, :through => :favorites, :source => 'user' 

class Step < ApplicationRecord 
belongs_to :recipe 
end 

class Favorite < ApplicationRecord 
belongs_to :recipe 
belongs_to :user 
end 

class User < ApplicationRecord 
has_many :recipes 
has_many :favorites 
has_many :favorite_recipes, :through => :favorites, :source => 'recipe’ 

devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 
end 

내 단계 컨트롤러에서 :

순간

, 나는이 모델을 가지고 사용자가 좋아하는 레서피의 각 단계, 하나씩 지연 (각 출판물간에 1 백만 또는 10 백만개 ... 무엇이든 구성 가능한 것). 그리고 단계의 이름을 숨기고 그것을 클릭 한 후 표시 할 수 있습니까? 기타

#views/steps/index.html.erb 

<h2><%=Recipe.name%></h2> 
<% @steps.each do |step| %> 

<p> <%=step.name%></p> 
#30mn later… the second step 
<p> <%=step.name%></p> 
#30mn later… the third one… 
<p> <%=step.name%></p> 

...

어떻게 가능할까요? cron 또는 Active Job을 사용해야합니까? 하지만 어떻게해야합니까?

미리 감사드립니다. ;)

답변

2

cron 또는 Active Job은 확실히 당신이 찾고있는 것이 아닙니다. 이러한 도구는 서버 처리에 사용되는 반면, 사용자는 클라이언트 처리가 필요합니다. 당신이 정말로해야 할 일은 단지 아약스 요청을 자바 스크립트를 사용하여 각 10mn 단계의 숫자로 서버에 보내는 것입니다.

마지막 단계에 도달하면 단계 요청을 안전하게 처리하고 서버 측에 시간을 저장해야합니다. 기술 사용자가 논리를 조사하고 추가 지침을 검색하기 위해 수동으로 요청을 보내면 이전에 요청을 받았을 때 거부해야한다는 계획을 세웠습니다 (그러한 보호가 필요합니다.)

JS 코드는 어떻게 생겼을까요? :

setInterval(10000, function loadStep() { 
    ajax.get([url], function(stepData) { 
    // Some logic to display your step on the page 
    }) 
}) 

당신은 DOM의 모든 단계를 렌더링 할 수

+0

가 감사를 등록 할 문제이다! ;) 나는 이것을 시도 할 것이다;) – Mehdi007

+0

@ Mehdi007 환영합니다! 만약 당신이 (미래의 검색을 위해) – AntonTkachov

+0

안녕하세요, 그냥 모든 질문을 렌더링 후 모든 단계를 렌더링 후 자바 스크립트를 실행하는 데 도움이 될 것입니다 내 코드를 틱으로 유효한 응답으로 표시하는 것이 좋을 것입니다 어떻게 그 후에 피할 수 있습니다 페이지가 다시로드되면 매번 1 단계부터 시작됩니까? – Mehdi007

0

서버 측에서 그러한 요청을 수락 한 다음 단계를 표시하는 자바 스크립트를 실행하지만, 그 것을 의미 것, 설치 적절한 경로를 잊지 마세요 페이지가 새로 고침 될 때마다 1 단계에서 다시 시작하십시오.

진보를 지속하려면 레서피와 사용자를 참조하는 테이블에 진보를 저장해야합니다. 그 후

그것은 a를 발전을 확인하는 규칙을 선택, 일반 아약스 쿼리가 새로 표시 단계 등 등

+0

답장을 보내 주셔서 감사합니다!;)이 작업을 수행 할 것입니다 – Mehdi007

+0

DOM에 모든 단계를 렌더링하는 경우 사용자가 이러한 단계를 사전에 액세스 할 수 있습니다. – SRack

+0

예, 그렇지만 실제로 중요한 것인지 아닌지 모르겠으므로 어쨌든 제안했습니다. – nekogami

관련 문제