mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
207747ec2d
When a model has an STI enum type, the type wasn't properly applied when disable joins was set to true. In this case we need to apply the scope from the association in `add_constraints` so that `type` is included in the query. Otherwise in a `has_one :through` with `type` all records will be returned because we're not filtering on type. Long term I think this might be in the wrong place and that we want to do this in a new definition of `target_scope` but that's a future refactoring that needs to be done.
50 lines
2.2 KiB
Ruby
50 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Member < ActiveRecord::Base
|
|
has_one :current_membership
|
|
has_one :selected_membership
|
|
has_one :membership
|
|
has_one :club, through: :current_membership
|
|
has_one :club_without_joins, through: :current_membership, source: :club, disable_joins: true
|
|
has_one :selected_club, through: :selected_membership, source: :club
|
|
has_one :favorite_club, -> { where "memberships.favorite = ?", true }, through: :membership, source: :club
|
|
has_one :hairy_club, -> { where clubs: { name: "Moustache and Eyebrow Fancier Club" } }, through: :membership, source: :club
|
|
has_one :sponsor, as: :sponsorable
|
|
has_one :sponsor_club, through: :sponsor
|
|
has_one :member_detail, inverse_of: false
|
|
has_one :organization, through: :member_detail
|
|
has_one :organization_without_joins, through: :member_detail, disable_joins: true, source: :organization
|
|
belongs_to :member_type
|
|
|
|
has_many :nested_member_types, through: :member_detail, source: :member_type
|
|
has_one :nested_member_type, through: :member_detail, source: :member_type
|
|
|
|
has_many :nested_sponsors, through: :sponsor_club, source: :sponsor
|
|
has_one :nested_sponsor, through: :sponsor_club, source: :sponsor
|
|
|
|
has_many :organization_member_details, through: :member_detail
|
|
has_many :organization_member_details_2, through: :organization, source: :member_details
|
|
|
|
has_one :club_category, through: :club, source: :category
|
|
has_one :general_club, -> { general }, through: :current_membership, source: :club
|
|
|
|
has_many :super_memberships
|
|
has_many :favorite_memberships, -> { where(favorite: true) }, class_name: "Membership"
|
|
has_many :clubs, through: :favorite_memberships
|
|
|
|
has_many :tenant_memberships
|
|
has_many :tenant_clubs, through: :tenant_memberships, class_name: "Club", source: :club
|
|
|
|
has_one :club_through_many, through: :favorite_memberships, source: :club
|
|
|
|
belongs_to :admittable, polymorphic: true
|
|
has_one :premium_club, through: :admittable
|
|
|
|
scope :unnamed, -> { where(name: nil) }
|
|
scope :with_member_type_id, -> (id) { where(member_type_id: id) }
|
|
end
|
|
|
|
class SelfMember < ActiveRecord::Base
|
|
self.table_name = "members"
|
|
has_and_belongs_to_many :friends, class_name: "SelfMember", join_table: "member_friends"
|
|
end
|