Имам страница, на която показвам списък с нишки за даден потребител, независимо дали протекторът е започнат от него или дали той е получателят на такъв.
Ето моят модел:
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 recipient_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, но също и всички резултати, където recipient_id е 4? Трябва да дам на влезлия потребител да види списък с всичките му текущи теми. Такива, които са започнати от тях и такива, които не са.
Потребители A и B имат само 1 нишка в таблицата message_threads, но всеки от тях може да има повече нишки, но с различни потребители, но само по 1 с всеки от тези потребители. Използвам тази таблица message_thread за препратка към разговори в моята таблица съобщения, където използвам скъпоценния камък acts_as_tree.
Трябва да има начин да групирам threads_as_starter и threads_as_recipient, напр. all_threads след това извикайте current_user.all_threads, за да върнете всички.
Благодаря предварително С уважение