如何在rails中的特定出版物之间创建时间间隔?

时间:2017-11-30 10:09:21

标签: ruby-on-rails ruby cron rails-activejob

我尝试构建食谱网络应用程序。这是一种“游戏”。每个用户都有可能喜欢食谱。起初,这个看起来是空的。然后,用户应该每隔一小时(或半小时)接收配方的每一步。

目前,我有这些模特:

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

在我的步骤控制器中,我有:

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

我想在我的索引步骤视图中显示:

用户喜欢的食谱的每一步,但是一个接一个地延迟(每个出版物之间1mn或10mn,无论......可配置的东西)。是否可以隐藏步骤的名称,并在点击后显示它?

#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?但我该怎么办?

提前感谢! ;)

1 个答案:

答案 0 :(得分:0)

您可以渲染DOM中的所有步骤,然后执行javascript来显示您的步骤,但这意味着每次重新加载页面时,您都会再次从步骤1开始。

如果您想要保留进步,则需要将进度存储在参考配方和用户的某个表格中。

之后,选择您的规则来检查改进,定期Ajax查询以注册新显示的步骤等等。