Възможно ли е да се групират асоциации в 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 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, за да върнете всички.

Благодаря предварително С уважение


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
Страхотно благодаря, where('sender_id = ? OR recipient_id = ?', 4, 4) работи - person LondonGuy; 15.02.2012