summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/concerns/has_whatnot.rb6
-rw-r--r--app/models/state.rb14
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