2015-04-23 63 views
0

用户模型0嵌套的关联记录:查询以找到具有在特定的嵌套的记录

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场未分配给当天的规划所有用户。

这意味着我不能排除老plannings

在其他的事情有planning_entries用户中,有对PlanningEntry表,只有:approved状态几种状态会被视为一个用户一个真正的协会在此请求规划

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

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

我尝试添加一些更OR/AND条件我查询处理所有需要的情况,但目前为止没有任何工作。

任何帮助,将隆重赞赏

+1

我尝试和失败来解析这句话:'谁拥有的一切,但批准state'一个planning_entry用户。我也没能找到你的Postgres版本。还有'当天的规划'? '天'应该是独特的/'计划'中的主键?你能澄清吗? –

+0

@ErwinBrandstetter对不起我的英语。我的意思是PlanningEntry表有几种状态,只有':approved'状态被认为是用户在此请求中计划的真实关联。希望它更清晰:) – C404

+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 
    ); 

这将返回所有用户,只(少数?)批准用于(任意)今天的会议(S)。

我猜你没有透露的列名。

如果您的混淆图层位于双引号混合大小写标识符的哈希值中,则您可能必须重复标识符。

更多:

+0

'我想...检索所有未分配到当天的Planning.'的用户,这对我来说意味着我需要所有不具有特定计划关联性的用户。 – C404

+0

@ C404:现在查询应该这样做。 –

相关问题