Multiple has_many / belongs_ between two identical models

I am curious how this works ... I have several has_many relationships between the same two models. This is a calendar application, so the user can be invited to an event, the user can attend the event, and the event belongs to the user to view who created this event.

user.rb

class User < ActiveRecord::Base
  has_many :invites, dependent: :destroy
  has_many :events, through: :invites

  has_many :events

  has_many :attendances, -> { where cancel: false },
                         dependent: :destroy                     
  has_many :events, -> { where "attendances.cancel" => false },
                    through: :attendances

event.rb

class Event < ActiveRecord::Base
  has_many :invites, dependent: :destroy
  has_many :users, through: :invites

  belongs_to :user

  has_many :attendances, -> { where cancel: false },
                         dependent: :destroy              
  has_many :users, -> { where "attendances.cancel" => false },
                   through: :attendances

I also have matching connection tables managed in their respective models, attendance.rband invite.rb.

... , . , . , , , . , , , , - User.find(1).events.

? , , ?

+4
1

, , has_many, class_name. , foreign_key , SQL , .

:

user.rb

class User < ActiveRecord::Base
  has_many :invites, dependent: :destroy
  has_many :invited_events, through: :invites, source: "Event"

  has_many :events # these are events "owned" by the user

  has_many :attendances, -> { where cancel: false }, dependent: :destroy
  has_many :attended_events, -> { where "attendances.cancel" => false }, through: :attendances, source: "Event"
end

event.rb

class Event < ActiveRecord::Base
  has_many :invites, dependent: :destroy
  has_many :invitees, through: :invites, source: "User"

  belongs_to :user # this is the owner of the event

  has_many :attendances, -> { where cancel: false }, dependent: :destroy
  has_many :attendees, -> { where "attendances.cancel" => false }, through: :attendances, source: "User"
end
+2

All Articles