ruby-on-rails - 在 Rails 4 中处理重复发生的事件

标签 ruby-on-rails ruby ruby-on-rails-4

我正在寻找为重复发生的事件实现逻辑的方法。我想显示下一周的事件,具体取决于事件的重复发生情况。

例如我有 2 个事件,一个是每周一次,另一个是每周两次,在我看来这周我只会展示一个事件,但下周会有两个展示。

到目前为止,我已经在准备创建的迁移文件中设置了我的模型

class CreateEvent
  create_table :events do |t|
   t.string :title
   t.text :description
   t.time :time_from
   t.time :time_to
   t.date :next_date
   t.string :day
   t.timestamps null: false
 end 
end
# An Event `has_one` Frequency

class CreateFrequency
  create_table :frequencies do |f|
    f.string :occurs
    f.integer :event_id
    t.timestamps null: false
  end
end
# Was Thinking of pre populating this with Weekly and 2 weekly
# A frequency `belongs_to` Event

我尽量保持简单,所以我是否需要实现某种逻辑,从事件 next_date 开始计算并计算到今天为止的周数.这里不太确定。

我什至可以在事件模型中使用一个标志,一个名为 display( bool 值)的列,并有一个 Rake 任务将使用 next_date 再次更新它?那行得通吗?请注意,我不确定那里的逻辑。

最佳答案

您可以将频率存储在事件表中(每周 1 次,每两周 2 次)然后使用一些数学计算出下一周是否比原始日期晚了偶数周,例如这个:

Event.where("(extract(week from NOW())::int - extract(week from time_from)::int) % 2 = 1 OR frequency = 1")

这应该抓取下周处于“2 周周期”或频率设置为 1 的所有事件。

注意:这至少适用于 postgres,但您需要将数据类型更改为日期时间,而不仅仅是时间。

如果您已经为事件存储了 next_date,那么您可以使用时间范围来选择下一周的所有事件:

start_date = Date.today.beginning_of_week + 7.days
end_date = start_date + 6.
@events = Event.where(next_date: start_date..end_date)

注意: 我将“即将到来的一周”读作“下周”,如果您希望有不同的行为,则必须稍微修改它。

关于ruby-on-rails - 在 Rails 4 中处理重复发生的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30143039/

相关文章:

ruby-on-rails - 找不到 JavaScript 运行时。有关可用运行时列表,请参阅 https ://github. com/sstephenson/execjs

c - 下载 Rails - C 无法编译

ruby-on-rails - 在 Rails 3 表单中处理非 utf-8 数据提交的最佳方式是什么?

ruby-on-rails - 用 Searchkick on Rails 做一个专业术语 "more like this query"?

ruby-on-rails - "gem install rails"在 mac OS X 上使用 rbenv 给出 FilePermissionError

ruby-on-rails - 帮助程序中的 capture_haml 不显示参数值

sql - ruby rails : Best way to Iterate a Relation or Associations

javascript - msgpack 的 Sinatra 二进制返回——字符集问题/字符在某处转换?

ruby - 使用 'first_or_create' 时应该如何合并哈希

ruby-on-rails - 连接到 redis + sidekiq 的 docker-compose 错误