查找具有关系记录的记录失败:PG :: UndefinedTable:错误:缺少表的FROM子句条目

时间:2018-09-20 11:22:24

标签: ruby-on-rails ruby postgresql activerecord

我有Activity has_one的模型ComputedActivity。我想查找所有已完成处理的活动,这意味着它们在数据库中具有计算的活动。

我写了这个查询

Activity.joins(:computed_activity).where.not(computed_activity: {id: nil})

这给了我错误

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "computed_activity")
LINE 1: ...tivities"."activity_id" = "activities"."id" WHERE "computed_...
                                                             ^
: SELECT  "activities".* FROM "activities" INNER JOIN "computed_activities" ON "computed_activities"."activity_id" = "activities"."id" WHERE "computed_activity"."id" IS NOT NULL LIMIT $1

是什么导致此操作失败,我该如何解决?

2 个答案:

答案 0 :(得分:3)

  

ActiveRecord :: StatementInvalid(PG :: UndefinedTable:错误:缺少   表“ computed_activity”的FROM子句条目)LINE 1:   ... tivities“。” activity_id“ =”活动“。” id“ WHERE”计算......

您应该在where子句中使用表名,而不是模型名。所以只要改变

Activity.joins(:computed_activity).where.not(computed_activity: {id: nil})

Activity.joins(:computed_activity).where.not(computed_activities: {id: nil})

答案 1 :(得分:0)

table name在条件(即computed_activities

)中应为复数形式
Activity.joins(:computed_activity).where.not(computed_activities: {id: nil})