Лучший метод для создания пользовательской области видимости с параметром select с привязкой в ​​Rails - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть отношение «многие ко многим» между 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.*

...