Rails PG::UndefinedTable:错误:表的子句条目中缺少

我有模型

课程优惠<ActiveRecord::Base
属于:代理机构
终止
类代理<ActiveRecord::Base
你有很多优惠吗
终止

当我提出这样的要求时,一切都很好

@offers=Offer.with_状态(:已确认)。
包括(:目的地,:邮轮,:轮船)。
分页(页码:10,页码:参数[:页码])。装饰

但我只想选择属于活动机构的报价(从机构表中选择列状态),因此我尝试这样做:

@offers=Offer.with_状态(:已确认)。
包括(:目的地,:邮轮,:轮船)。
加入(:代理)。
其中(机构:{状态:'活动'})。
分页(页码:10,页码:参数[:页码])。装饰

完成此操作后,表“agency”的子句条目中出现错误PG::UndefinedTable:error:missing。我的代码有什么问题

查询提供了以下错误和sql:

PG::UndefinedTable:错误:表“agency”第1行的子句条目中缺少:…id“其中('offers')、'state''在('confirmed')和“agency.”…^:
选择“优惠”。“id”作为t0_r0,“优惠”。“名称”作为t0_r1,“优惠”。“目的地id”作为t0_r2,“优惠”。“巡航线路id”作为t0_r3,“优惠”。“船舶id”作为t0_r4,“优惠”。“出发日期”作为t0_r5,“优惠”。“出发港口id”作为t0_r6,“优惠”。“到达日期”作为t0_r7,“优惠”。“到达港口id”作为t0_r8,“价格”作为t0_r9。“奖金”作为t0_r10,“优惠”。“行程”作为t0_r11,“优惠”。“董事会语言”作为t0_r12,“优惠”。“代理登陆页面”作为t0_r13,“优惠”。“利益”作为t0_r14,“优惠”。“内部价格”作为t0_r15,“优惠”。“内部价格”作为t0_r16,“优惠”。“外部价格”作为t0_r17,“优惠”。“外部价格”作为t0_r18,“优惠”。“价格”“作为t0_r19,“报价”。“阳台价格正常”作为t0_r20,“报价”。“套房价格”作为t0_r21,“报价”。“套房价格正常”作为t0_r22,“报价”。“幸运价格”作为t0_r23,“报价”。“幸运价格正常”作为t0_r24,“报价”。“有效期自”作为t0_r25,“报价”。“有效期至”作为t0_r26,“报价”。“创建于”作为t0_r27,“更新于”作为t0 r28“报价”。“说明”AS t0_r29,“提供”。“代理机构id”AS t0_r30,“提供”。“说明”AS t0_r31,“目的地”。“id”AS t1_r0,“目的地”。“名称”AS t1_r1,“目的地”。“创建地点”AS t1_r2,“目的地”。“更新地点”AS t1_r3,“邮轮航线”。“id”AS t2_r0,“邮轮航线”。“名称”AS t2_r1,“邮轮航线”。“创建地点”AS t2_r2,“邮轮航线”。“更新地点”“作为t2_r3,“船舶”。“id”作为t3_r0,“船舶”。“名称”作为t3_r1,“船舶”。“图片”作为t3_r2,“船舶”。“邮轮线id”作为t3_r3,“船舶”。“创建于”作为t3_r4,“船舶”。“更新于”作为t3_r5
来自“报价”
在“代理”上内部加入“代理”。“id”=“提供”。“代理id”
在“目的地”上左外部加入“目的地”。“id”=“提供”。“目的地\u id”
左侧外部加入“邮轮线路”上的“邮轮线路”。“id”=“优惠”。“邮轮线路id”
左外连接“ships”上的“ships”。“id”=“offers”。“ship\u id”
其中('confirated')中的(“要约”。'state')和“代理”。“state”='active'
限制10偏移0

您唯一添加的是where-子句。似乎有问题:

其中(机构:{state:'active'})

…并生成错误的条件,因为本例中的哈希键应表示表名。您可能应该有以下内容:

其中(机构:{state:'active'})

更新

鉴于这一点吸引了相当多的关注,我想我也应该建议一种不同的方法来做同样的事情,稍微更具可组合性:

合并(代理机构位置(状态:“活动”))

这个怎么样更好?它对模型的表名不做任何假设(在大多数情况下它并不重要),并允许您使用范围

机构内部
经营范围:主动式,->{where(状态:'active')}
#其他地方
合并(Agency.active)

发表评论