2015-04-23 95 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:現在查詢應該這樣做。 –

相關問題