在范围内使用包含的Rails无法将表插入到选择的语句中

时间:2017-11-30 14:20:06

标签: ruby-on-rails

导轨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 ...“

1 个答案:

答案 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,因此您应该使用第二个示例。