2012-03-20 49 views
4

我正在開發一個rails項目。 我有兩個表存儲來自不同系統的數據:任務和項目。rails活動記錄:更新加入的表

有了一個條件,Projects通過ref_id知道任務,但不是相反的方向。 因此,一旦匹配找到從聯接,我想設置task.project_id與匹配的項目表的ID。

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

我的問題在這裏是:我怎麼能實現這個使用軌道中的活動記錄?

回答

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}") 
1

Task.joins(:項目).update_all( 「tasks.project_id = projects.id」)

+0

這正是你所做的全部保存在'ActiveRecord'中。 – bschaeffer 2014-09-11 12:47:11

+15

拋出:「ActiveRecord :: StatementInvalid:PG :: UndefinedTable:錯誤:缺少表」項目「的FROM子句條目。 Rails 4.2 – RAJ 2015-04-20 10:33:41

1

如果你使用的是Postgres你可以運行從模型中的「加入」像update_all

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調用已爲鐵路s 5並且應該切換到只是update

由於您直接發送sql,因此您需要確保使用的語法適合您的數據庫。