使用联接更新会导致模糊字段错误

Rya*_*yan 1 sql activerecord ruby-on-rails

我有模特:

User(id)   # has_many tasks through projects
Project(id, user_id, done:boolean)
Task(project_id, done:boolean)
Run Code Online (Sandbox Code Playgroud)

我正在尝试更新用户的任务done字段,但是我收到了一个模糊的字段错误,因为Project和Task都有一个done字段.

生成用于将用户的所有任务标记为已完成的SQL,如下所示:

>> @user.tasks.update_all(done: true)

UPDATE tasks
INNER JOIN projects ON projects.id = tasks.project_id
SET done = 1
WHERE projects.user_id = 2548
Run Code Online (Sandbox Code Playgroud)

我试过这样做:

@user.tasks.update_all("tasks.done" => true)
Run Code Online (Sandbox Code Playgroud)

但是这会返回未知字段tasks.done,这很奇怪,因为我曾经在select select上指定表名并且它有效.

任何的想法?

小智 5

尝试 @user.tasks.update_all("tasks.done = 1")