查询以查找特定嵌套记录上具有0嵌套关联的记录

时间:2015-04-23 18:15:12

标签: postgresql ruby-on-rails-4 rails-activerecord

用户模型:

Class User < ActiveRecord::Base
  has_many :planning_entries

PlanningEntry模型:

Class PlanningEntry < ActiveRecord::Base
  belongs_to :planning
  belongs_to :user
  has_many :plannings

规划模型

Class Planning < ActiveRecord::Base
  has_many :planning_entries
  • 计划表有一个字段day:date
  • PlanningEntry有一个字段state: [:approved, :canceled, etc.]

我想建立一个范围,使用day字段检索未分配到当天规划的所有用户。

这意味着我无法排除拥有planning_entries的用户plannings

另一方面,PlanningEntry表有几种状态,只有:approved状态被视为用户对此请求中的计划的真实关联

到目前为止,我做了这个查询:

 User.joins( planning_entries: :planning ).
    where( "(plannings.day = ? AND planning_entries.state != 'approved')",
    Planning.current_day)

我尝试在查询中添加更多OR / AND条件来处理所有必需的案例但到目前为止没有任何工作。

欢迎任何帮助

1 个答案:

答案 0 :(得分:0)

  

我想...检索未分配给当前用户的所有用户   一天的计划。

在SQL中,有多种方式之一:

SELECT *
FROM   Users u
WHERE  NOT EXISTS (
   SELECT 1
   FROM   Planning p
   JOIN   PlanningEntry pe ON pe.planning_id = p.id
   WHERE  p.day = CURRENT_DATE
   AND    pe.users_id = u.id
   AND    state = 'approved'  -- only 'approved' matters
   );

这将返回所有用户,除了(少数几个?)被批准用于(今天)任何会议的用户。

我猜你没有透露的专栏名称。

如果混淆图层是双引号混合大小写标识符的习惯,则可能必须重复引用标识符。

更多: