【问题标题】:Rotating product of the day in RailsRails 中的每日轮换产品
【发布时间】:2010-03-07 20:22:02
【问题描述】:

我正在以一种特殊的方式创建一个类似于臭名昭著的 Woot 的网站:我希望以每天一个的速度轮换产品。我正在使用 RoR,并且希望动态选择一种产品,而不必每天输入一个。所以这里是要求:

1) 每天获得新产品
2) 从表中动态选择
3)确保不要两次选择相同的产品

就是这样。在产品表中,我目前有一个名为 listed 的布尔值,它将标记产品是否已列出。我的问题是,我是否应该运行某种数据库作业来选择当天的产品,或者有什么方法可以让我对日期进行哈希处理并得出一个应用程序将在日期更改之前显示的 ID。

感谢您的时间。

【问题讨论】:

  • 您是每天随机选择一个产品,还是按顺序选择产品?

标签: ruby-on-rails database database-design


【解决方案1】:

就我个人而言,我会保持简单并按照预定的工作方式进行。更具体地说,我可能会使用whenever gem 来包装一个每天午夜运行一次的 cron 作业。然后,您可以在 Product 模型中设置一个方法来选择当前的“今日产品”。

这样的事情应该可以工作:

product.rb

class Product < ActiveRecord::Base
  # Return the current product of the day
  def self.product_of_the_day
    where(listed: true).first
  end

  # Set up the product of the day
  def self.setup_product_of_the_day
    current_product = self.product_of_the_day

    product_ids = where.not(id: current_product.id).pluck(:id)

    next_product = self.find(product_ids.sample)

    current_product.update_attribute(:listed, false)
    next_product.update_attribute(:listed, true)
  end
end

schedule.rb

every 1.day do
  runner "Product.setup_product_of_the_day"
end

【讨论】:

  • 嘿-谢谢你的回答。几乎是我正在考虑的解决方案。这里有一个问题:我希望将它部署到 Heroku。使用他们设置的 cron 作业将如何工作?谢谢。
  • 我不确定部署到 Heroku 的工作原理。如果您可以使用 Capistrano,那么您可以将一些任务添加到您的部署文件中,以在部署时更新 crontab 文件。如果您不能使用 Capistrano,您至少可以从 whenever 页面上的 Capistrano 集成 部分获得一些想法。
猜你喜欢
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 2017-11-15
相关资源
最近更新 更多