我正在开发一个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中的活动记录来实现这一目标?
答案 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”)