Непрочитанные сообщения в участвующих событиях без звука

avatar
Dorian
8 августа 2021 в 20:15
31
1
0

Организатор (event.user) также должен иметь attendance (с приглушенным значением true/false).

Вот упрощенные модели из db/schema.rb:

  create_table "attendances" do |t|
    t.bigint "user_id"
    t.bigint "event_id"
    t.boolean "muted"
  end

  create_table "events" do

  create_table "message_reads" do |t|
    t.bigint "message_id"
    t.bigint "user_id"
  end

  create_table "messages" do |t|
    t.string "from_type"
    t.bigint "from_id"
    t.string "to_type"
    t.bigint "to_id"
    t.text "content"
  end

  create_table "users" do |t|
    t.string "email"
  end

Как узнать, какие сообщения не прочитаны пользователем? и какие события, которые имеют непрочитанные сообщения? (в том же запросе с GROUP BY было бы здорово)

знание того, что если отправителем является пользователь, то сообщение прочитано и что должно быть присутствие, которое не отключено

спасибо

Источник
melcher
17 августа 2021 в 22:14
0

что вы подразумеваете под "у события есть непрочитанные сообщения"? Есть ли в событии сообщения как «кому» или «от»? Если нет, то как связаны события и сообщения?

melcher
17 августа 2021 в 22:17
0

Меня смущает «знание того, что если отправитель является пользователем, сообщение прочитано» - вы говорите, что сообщения, о которых мы заботимся для пользователя, это «Message.where(to: user)»?

melcher
17 августа 2021 в 22:19
0

Я не уверен, как интерпретировать «должна быть не приглушенная посещаемость». Как сообщения связаны с событием или посещаемостью? Имеет ли событие идентификатор message_id или сообщение имеет идентификатор события? С удовольствием обновлю свой ответ, как только пойму.

Ответы (1)

avatar
melcher
17 августа 2021 в 22:23
0

Я немного запутался в некоторых дополнительных требованиях, но вот попытка получить непрочитанные сообщения для пользователя при следующей настройке активной записи.

# assuming your models look something like this...
class User < ActiveRecord::Base
  has_many :received_messages, as: :to
  has_many :sent_messages, as: :from
  has_many :message_reads
end
class Messages < ActiveRecord::Base
  belongs_to :to, polymorphic: true
  has_many :message_reads
end

# unread messages
@unread_messages = @user.received_messages.left_outer_joins(:message_reads).where(message_reads: {id: nil})

Это использует метод left_outer_joins из Rails 5.0. В более ранних версиях Rails вы можете использовать плагин left-join.

Не знаю, как событие соединяется с сообщением — есть ли у события message_id или наоборот?