diff options
author | David Gay <david@davidgay.org> | 2021-06-03 19:55:55 -0400 |
---|---|---|
committer | David Gay <david@davidgay.org> | 2021-06-03 19:55:55 -0400 |
commit | 2cb92046ebe697d6e17c78e968ec1bcf528487f0 (patch) | |
tree | 95a3d1de321573590dd6e46d3028d8ef92867122 /app/models | |
parent | 888bcdc0492ff3587e9f2916993a82b9f27c61f1 (diff) |
Only allow one food condition per character
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/concerns/has_whatnot.rb | 6 | ||||
-rw-r--r-- | app/models/state.rb | 14 |
2 files changed, 16 insertions, 4 deletions
diff --git a/app/models/concerns/has_whatnot.rb b/app/models/concerns/has_whatnot.rb index 289fe40..a0934ef 100644 --- a/app/models/concerns/has_whatnot.rb +++ b/app/models/concerns/has_whatnot.rb @@ -7,7 +7,11 @@ module HasWhatnot end def tags - whatnot[:tags] if whatnot + whatnot[:tags] ? whatnot[:tags] : [] + end + + def where_has_tag(tag) + where("whatnot->'tags' ? :tag", tag: tag) end end end diff --git a/app/models/state.rb b/app/models/state.rb index 27c8741..29b3f42 100644 --- a/app/models/state.rb +++ b/app/models/state.rb @@ -2,7 +2,7 @@ class State < ApplicationRecord belongs_to :character belongs_to :condition - after_create :destroy_duplicates + after_create :overwrite_old_states def expired? self.expires_at < Time.now @@ -17,7 +17,15 @@ class State < ApplicationRecord end private - def destroy_duplicates - self.character.states.where(condition: self.condition).where.not(id: self.id).destroy_all + def overwrite_old_states + # Don't allow duplicate conditions; just destroy the old one. + character.states.where(condition: condition).where.not(id: id).destroy_all + + # Only allow one food condition. Destroy the old one. + if condition.tags.include?("food") + character.states.each do |state| + state.destroy if state.id != id && state.condition.tags.include?("food") + end + end end end |