私のアプリケーションでは、ユーザーがまだ実行していない次のタスクを実行します。私には3つのモデルがあります。多くのタスクがある本と、多くのタスクを持っていてそれに属しているユーザーがいます。テーブルtasks_usersテーブルには、完了したすべてのタスクが含まれているため、実行する次のタスクを見つけるために複雑なクエリを作成する必要があります。
私は純粋なSQLで機能する2つのソリューションを考え出しましたが、それらを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;
これは私がMetaWhereプラグインを使ってRailsで行ったことです
book.tasks.joins(:users.outer).where(:users => {:id => nil})
しかし、私は現在のユーザーをそこに連れて行く方法も理解できません、
助けてくれてありがとう!