Rails способ сделать поиск объединяющих таблиц (используя метод .find) - PullRequest
0 голосов
/ 28 декабря 2011

У меня есть следующие таблицы: UserAction: type_action: строкаentity_id: intdate: datetimeuser_id: int (ссылается на пользователя) Вопрос: текст: строкаuser_id: int (ссылается на пользователя)ответил: tinyint EntityTracker type_track: строкаentity_id: intдействие: строкаdate: datetime

Мне нужно знать, сколько (количество) записей в EntityTracker (alias et) соответствует этим условиям:- action = 'ANSWERED'- type_track = 'QUESTION'- date> than (дата записи в UserAction (псевдоним ua) с ua.entity_id = et.entity_id и ua.type_action = et.type_track)- entity_id соответствует условию: вопрос с id = et.entity_id имеет user_id = params [: user_id]

Поэтому я должен присоединиться к Вопросу и UserAction.Любая помощь?

1 Ответ

1 голос
/ 28 декабря 2011

Может быть, что-то вроде этого:

EntityTracker.find(:all,
                   :from => 'entity_trackers et',
                   :select => 'COUNT(et.id) AS count',
                   :conditions => ['et.action = ? AND
                                    et.type_track = ? AND
                                    et.date > (SELECT MAX(ua.date)
                                               FROM user_actions ua
                                               WHERE ua.entity_id=et.entity_id AND
                                                     ua.type_action=et.type_track) AND
                                    EXISTS (SELECT questions.id
                                            FROM questions
                                            WHERE questions.id=et.entity_id AND
                                                  questions.user_id=?)',
                                   'ANSWERED', 'QUESTION', user_id])
...