Что ж, в модели User
лежит больше ответственности, чем необходимо, и для этого нет веских оснований.
Сначала мы можем определить область действия в EventUser
модели, потому что где она на самом деле принадлежит, например:
class EventUser < ActiveRecord::Base
belongs_to :event
belongs_to :user
scope :active, -> { where(active: true) }
scope :inactive, -> { where(active: false) }
end
Теперь у пользователя могут быть оба вида событий: активные и неактивные события, поэтому мы можем определить отношение в User
модели следующим образом:
class User < ActiveRecord::Base
has_many :active_event_users, -> { active }, class_name: "EventUser"
has_many :inactive_event_users, -> { inactive }, class_name: "EventUser"
has_many :inactive_events, through: :inactive_event_user,
class_name: "Event",
source: :event
has_many :active_events, through: :active_event_users,
class_name: "Event",
source: :event
end
Прелесть этой техники в том, что функциональность того, чтобы быть активным или неактивным событием, относится к модели EventUser
, и если в будущем функциональность потребуется изменить, она будет изменена только в одном месте: EventUser
модель, и изменения будут отражены во всех других моделях.