rails activerecord:使用join更新表

时间:2012-03-20 09:05:21

标签: ruby-on-rails activerecord

我正在开发一个rails项目。 我有两个表来存储来自不同系统的数据:任务和项目。

对于条件,Projects通过ref_id知道任务,但不是相反的方向。 所以,一旦从连接中找到匹配项,我想设置task.project_id和匹配的Projects表的id。

UPDATE FROM task AS t
LEFT JOIN projects as p
ON t.ref_id = p.ref_id
SET t.project_id = p.id

我的问题是:如何使用rails中的活动记录来实现这一目标?

3 个答案:

答案 0 :(得分:1)

如果您正在使用postgres,则可以使用&#34; join&#34;运行<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form> <input type="text" name="foo" value="foo" /> <input type="text" name="bar" value="bar" style="display:none" /> <input type="text" name="baz" value="baz" /> </form>。从模型中可以看出:

update_all

注意:Rails 5不推荐使用Task.connection.update_sql("UPDATE tasks AS t SET project_id = p.id FROM projects AS p WHERE t.ref_id = p.ref_id")调用,应该只切换到update_sql

由于您直接发送sql,因此需要确保使用适合您数据库的语法。

答案 1 :(得分:0)

你可以通过直接传递你的SQL来做到这一点

Task.connection.update_sql("UPDATE FROM task AS t LEFT JOIN projects as p ON t.ref_id = #{p.ref_id} SET t.project_id = #{p.id}")

答案 2 :(得分:0)

Task.joins(:项目).update_all( “tasks.project_id = projects.id”)