用户模型:
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
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
条件来处理所有必需的案例但到目前为止没有任何工作。
欢迎任何帮助
答案 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
);
这将返回所有用户,除了(少数几个?)被批准用于(今天)任何会议的用户。
我猜你没有透露的专栏名称。
如果混淆图层是双引号混合大小写标识符的习惯,则可能必须重复引用标识符。
更多: