导轨4.2 我在orders.rb的订单上有以下范围
scope :sales, -> {where ("orders.order_ref <>'' and date_of_sale IS NOT NULL ")}
scope :with_salesman, -> { includes(:pipe_records).where('pipe_records.pipe_part_id=1 AND pipe_records.owner_id IS NOT NULL') }
我是通过我的订单控制器用
来调用它的 @by_salesman=Order.sales.with_salesman
引发错误 PG :: UndefinedTable:错误:缺少表
的FROM子句条目来自控制台的sql是
SELECT "orders".* FROM "orders" WHERE (pipe_records.pipe_part_id=1 AND pipe_records.owner_id IS NOT NULL)):
我在范围内使用了连接并且它工作正常但是dosnt返回我想要的记录集中的销售人员数据,我错过了让rails插入“选择命令。,pipe_records。 FROM ...“
答案 0 :(得分:0)
如果您在includes
子句中指定包含的表中的字段,where
命令将仅执行连接。虽然SQL字符串不算数;你需要更多类似的东西:
scope :with_salesman, -> { includes(:pipe_records).where(pipe_records: {pipe_part_id: 1}).where("pipe_records.owner_id IS NOT NULL") }
请注意,第一个where条件导致连接,这允许第二个工作。根据您的Rails版本,您可以访问.not
,允许:
scope :with_salesman, -> { includes(:pipe_records).where(pipe_records: {pipe_part_id: 1}).where.not(pipe_records: {owner_id: nil}) }
这个更好,但只在Rails 4以后才支持。由于问题指定了Rails 4.2,因此您应该使用第二个示例。