У меня есть страница, на которой я отображаю список потоков для пользователя, независимо от того, был ли он запущен ими или они были получателями одного из них.
Вот моя модель:
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, чтобы вернуть все.
Заранее спасибо С уважением