У меня есть отношение «многие ко многим» между User
и Event
через другую таблицу с именем Participation
class User < ApplicationRecord
has_many :participations
has_many :events, through: :participations
end
class Event < ApplicationRecord
has_many :participations
class Participation
belongs_to :user
belongs_to :event
end
При получении событий я хочу включить временный атрибут attending
, который для текущего пользователя указывает, посещает ли пользователь какое-либо событие или нет.
У меня уже есть рабочее решение с настраиваемой и настраиваемой областью действия SQL:
class Event
scope :with_participating, -> (user) {
select(
sanitize_sql_array([
"events.*, event.id in (SELECT event_id FROM participations WHERE user_id = ?) AS current_user_participating",
user.id
])
)
}
Это работает, но я уверен, что должен быть лучший способ построить это?
И есть ли способ ДОБАВИТЬ current_user_participating
к текущему выбору, не заставляя выбирать все через events.*