我正在寻找为重复发生的事件实现逻辑的方法。我想显示下一周的事件,具体取决于事件的重复发生情况。
例如我有 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/