Можно ли группировать ассоциации в ruby ​​on rails?

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

Вот моя модель:

  has_many :threads_as_starter, :class_name => 'MessageThread', :foreign_key => 'sender_id'
  has_many :threads_as_recipient, :class_name => 'MessageThread', :foreign_key => 'recipient_id'

Что я хотел бы сделать, так это определить метод, который я могу сохранить в переменной экземпляра и выполнить цикл на моей странице просмотра, которая отображает потоки current_user.

Когда я запускаю: MessageThread.where('sender_id OR Receiver_id = ?', 4)

   1.9.3p0 :045 > MessageThread.where( 'sender_id OR recipient_id = ?', 4 )
  MessageThread Load (0.4ms)  SELECT `message_threads`.* FROM `message_threads` WHERE (sender_id OR recipient_id = 4) ORDER BY message_threads.created_at DESC
 => [#<MessageThread id: 89, message_id: 219, sender_id: 4, recipient_id: 38, status: 0, created_at: "2012-02-15 12:26:17", updated_at: "2012-02-15 12:26:17">, #<MessageThread id: 88, message_id: 218, sender_id: 2, recipient_id: 4, status: 0, created_at: "2012-02-14 13:41:19", updated_at: "2012-02-14 13:41:19">, #<MessageThread id: 87, message_id: 210, sender_id: 1, recipient_id: 2, status: 0, created_at: "2012-02-14 13:31:12", updated_at: "2012-02-14 13:31:12">] 

Я не понимаю, почему он показывает мне строки, в которых идентификатор отправителя или получателя не равен 4.

Какой запрос вернет все результаты, для которых sender_id равен 4, а также все результаты, для которых Receiver_id равен 4? Мне нужно дать вошедшему в систему пользователю, чтобы увидеть список всех их текущих потоков. Те, которые были начаты ими, и те, которые не были начаты.

У пользователей A и B есть только 1 поток в таблице message_threads, но любой из них может иметь больше потоков, но с разными пользователями, но только по 1 с каждым из этих пользователей. Я использую эту таблицу message_thread для ссылки на разговоры в моей таблице сообщений, где я использую гем act_as_tree.

Должен быть способ сгруппировать threads_as_starter и threads_as_recipient, например. all_threads, затем вызовите current_user.all_threads, чтобы вернуть все.

Заранее спасибо С уважением


person LondonGuy    schedule 15.02.2012    source источник


Ответы (1)


where('sender_id OR recipient_id = ?', 4)

должно быть

where('sender_id = ? OR recipient_id = ?', 4)

или, вероятно,

where('sender_id = ? OR recipient_id = ?', 4, 4)
person Reactormonk    schedule 15.02.2012
comment
Большое спасибо, где ('sender_id = ? OR Receiver_id = ?', 4, 4) сработало - person LondonGuy; 15.02.2012