From bff34fb568f7a83c03e2e51b458a1e44b67b794e Mon Sep 17 00:00:00 2001 From: erdgeist Date: Fri, 3 Jul 2026 02:00:53 +0200 Subject: ascade-destroy occurrences; support events without a fixed start time - Event#occurrences is now dependent: :destroy, so destroying an Event (directly, or via Node's cascade) removes its Occurrence rows instead of orphaning them. - Renamed generate_occurences -> generate_occurrences (typo fix); callback and method updated together. - Occurrence.generate returns early when event.start_time is nil, so a chapter with no sourced time produces zero occurrences instead of a guessed one. - seed_chapter no longer falls back to 19:00 when start_time is absent; base_time/end_time are nil in that case. Database-level foreign key cascade on occurrences.event_id is still pending. --- app/models/event.rb | 6 +++--- app/models/occurrence.rb | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/models/event.rb b/app/models/event.rb index e2e71c9..b8651a8 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -2,12 +2,12 @@ class Event < ApplicationRecord include RruleHumanizer belongs_to :node, optional: true - has_many :occurrences + has_many :occurrences, dependent: :destroy acts_as_taggable_on :tags validates :title, presence: true, unless: -> { node_id.present? } - after_save :generate_occurences + after_save :generate_occurrences def occurrences_in_range start_time, end_time self.occurrences.where( @@ -21,7 +21,7 @@ class Event < ApplicationRecord end private - def generate_occurences + def generate_occurrences Occurrence.generate self end end diff --git a/app/models/occurrence.rb b/app/models/occurrence.rb index 41ef4cb..c6a2380 100644 --- a/app/models/occurrence.rb +++ b/app/models/occurrence.rb @@ -27,6 +27,7 @@ class Occurrence < ApplicationRecord # event are then calculated and created. def self.generate event self.where(:event_id => event.id).delete_all + return if event.start_time.nil? node = event.node duration = (event.end_time - event.start_time) -- cgit v1.3