From 0b684eb05e21800aac8c77b08f9ddbdbec203e51 Mon Sep 17 00:00:00 2001 From: Brenda Wallace Date: Fri, 26 May 2017 23:00:06 +1200 Subject: [PATCH] Checks owner exists, in default_scopes of many models --- app/models/garden.rb | 3 ++- app/models/harvest.rb | 3 ++- app/models/planting.rb | 7 ++++--- app/models/post.rb | 3 ++- app/models/seed.rb | 5 +++-- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/models/garden.rb b/app/models/garden.rb index 2da7d4f3d..8aee095ae 100644 --- a/app/models/garden.rb +++ b/app/models/garden.rb @@ -14,7 +14,8 @@ class Garden < ActiveRecord::Base after_validation :empty_unwanted_geocodes after_save :mark_inactive_garden_plantings_as_finished - default_scope { order("lower(name) asc") } + default_scope { owner_exists.order("lower(name) asc") } + scope :owner_exists, -> { joins(:owner) } scope :active, -> { where(active: true) } scope :inactive, -> { where(active: false) } diff --git a/app/models/harvest.rb b/app/models/harvest.rb index 4ce1a1b57..b8a17cf02 100644 --- a/app/models/harvest.rb +++ b/app/models/harvest.rb @@ -9,7 +9,8 @@ class Harvest < ActiveRecord::Base belongs_to :plant_part belongs_to :planting - default_scope { order(created_at: :desc) } + default_scope { owner_exists.order(created_at: :desc) } + scope :owner_exists, -> { joins(:owner) } validates :crop, approved: true validates :crop, presence: { message: "must be present and exist in our database" } diff --git a/app/models/planting.rb b/app/models/planting.rb index 81e7267dd..e38a5ad85 100644 --- a/app/models/planting.rb +++ b/app/models/planting.rb @@ -8,15 +8,16 @@ class Planting < ActiveRecord::Base belongs_to :crop, counter_cache: true has_many :harvests, -> { order(harvested_at: :desc) }, dependent: :destroy - default_scope { order(created_at: :desc) } + default_scope { owner_exists.order(created_at: :desc) } + scope :owner_exists, -> { joins(:owner) } scope :finished, -> { where(finished: true) } scope :current, -> { where(finished: false) } scope :interesting, -> { has_photos.one_per_owner } scope :one_per_owner, lambda { joins("JOIN members m ON (m.id=plantings.owner_id) - LEFT OUTER JOIN plantings p2 - ON (m.id=p2.owner_id AND plantings.id < p2.id)").where("p2 IS NULL") + LEFT OUTER JOIN plantings p2 + ON (m.id=p2.owner_id AND plantings.id < p2.id)").where("p2 IS NULL") } delegate :name, diff --git a/app/models/post.rb b/app/models/post.rb index 98858879a..dccf90b8b 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -36,7 +36,8 @@ class Post < ActiveRecord::Base end end - default_scope { order(created_at: :desc) } + default_scope { author_exists.order(created_at: :desc) } + scope :author_exists, -> { joins(:author) } validates :subject, presence: true, diff --git a/app/models/seed.rb b/app/models/seed.rb index a9eb2ffe5..ce7a48c98 100644 --- a/app/models/seed.rb +++ b/app/models/seed.rb @@ -6,7 +6,7 @@ class Seed < ActiveRecord::Base belongs_to :crop belongs_to :owner, class_name: 'Member', foreign_key: 'owner_id', counter_cache: true - default_scope { order(created_at: :desc) } + default_scope { owner_exists.order(created_at: :desc) } validates :crop, approved: true delegate :name, to: :crop @@ -32,7 +32,8 @@ class Seed < ActiveRecord::Base }, allow_nil: true - scope :tradable, -> { where("tradable_to != 'nowhere'") } + scope :owner_exists, -> { joins(:owner) } + scope :tradable, -> { where.not(tradable_to: 'nowhere') } scope :interesting, -> { tradable.has_location } scope :has_location, -> { joins(:owner).where.not("members.location": nil) } TRADABLE_TO_VALUES = %w(nowhere locally nationally internationally).freeze