我有一个跟踪表和应用程序表
application.rb has_many :trackers
跟踪器
归属地:应用程序
我试图做的是更新 trackers 表中的 check_in_date 以查询到应用程序表中的 begin_date 仅针对那些 check_in_date 等于“2019-05-30”的记录。
我正在尝试运行下面的命令,但出现错误。
Tracker.joins(:application).where("check_in_date = ?", "2019-05-30").update_all("tracker.check_in_date = application.begin_date")
错误
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: missing FROM-clause entry for table "application")
知道我哪里出错了。
也许试试这个:
注意我不知道这是否可行,所以除非你能确认,否则不要在生产中这样做
Tracker.where(check_in_date: "2019-05-30")
.update_all("check_in_date = (#{
Application.select(:begin_date)
.where('applications.id = trackers.application_id').to_sql})"
)
理论上,这应该导致以下 SQL
UPDATE trackers
SET check_in_date = (
SELECT
begin_date
FROM
applications
WHERE
applications.id = trackers.application_id
)
WHERE
trackers.check_in_date = "2019-05-30"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句