在我的应用程序中,下一个任务尚未由用户完成。我有三个模型,一本有很多任务的书,然后我有一个拥有并属于许多任务的用户。表 tasks_users 表包含所有已完成的任务,因此我需要编写一个复杂的查询来查找下一个要执行的任务。
我在纯 SQL 中提出了两种可行的解决方案,但我无法将它们翻译成 rails,这就是我需要帮助的地方
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;
这就是我在 Rails 中使用 MetaWhere 插件所做的
book.tasks.joins(:users.outer).where(:users => {:id => nil})
但我也不知道如何让当前用户在那里,
谢谢你的帮助!