В моем приложении I следующая задача, которая еще не была выполнена пользователем. У меня есть три модели: A Книга , в которой есть много Задач , а затем у меня есть Пользователь , который имеет и принадлежит ко многим задачам. Таблица tasks_users содержит все выполненные задачи, поэтому мне нужно написать сложный запрос, чтобы найти следующую задачу для выполнения.
Я предложил два решения на чистом SQL, которые работают, но я не могу перевести их на рельсы, вот что мне нужно помочь с
SELECT * FROM `tasks`
WHERE `tasks`.`book_id` = @book_id
AND `tasks`.`id` NOT IN (
SELECT `tasks_users`.`task_id`
FROM `tasks_users`
WHERE `tasks_users`.`user_id` = @user_id)
ORDER BY `task`.`date` ASC
LIMIT 1;
и в равной степени без вложенного выбора
SELECT *
FROM tasks
LEFT JOIN tasks_users
ON tasks_users.tasks_id = task.id
AND tasks_users.user_id = @user_id
WHERE tasks_users.task_id IS NULL
AND tasks.book_id = @book_id
LIMIT 1;
Это то, что я сделал в рельсах с плагином MetaWhere
book.tasks.joins(:users.outer).where(:users => {:id => nil})
но я не могу понять, как получить туда текущего пользователя,
Спасибо за любую помощь!