我試圖建立一些關係,在我的Rails應用4,但我「遇到了一些麻煩,M I有四節課如下:紅寶石4路的關係上軌
class Client < ActiveRecord::Base
has_many :checks
belongs_to :tier
has_many :months
end
class Check < ActiveRecord::Base
belongs_to :client
belongs_to :group, class_name: "Month"
end
class Tier < ActiveRecord::Base
has_many :clients
has_many :months
end
class Month < ActiveRecord::Base
has_many :clients
belongs_to :tier
has_many :checks, ->(month) { where deposit_date: month.start_date..month.end_date }
validates_uniqueness_of :group, scope: :tier_id
end
編輯:爲了澄清,有三個'層'具有不同的月份結構,例如,第1層的'1月'將從第1層開始,第2層將從第3層開始,依此類推,其設計使得只有三層(即三個不同的月份結構),客戶將只有一個層級,但通過這個層級需要多個月。對月份表格還有一個限制,以確保同一層級每月不超過1個條目。本質上是啊幾個月和客戶之間的abtm關係,但客戶所在的層次決定了它迴歸的「團體」。
表格的設置方式使客戶端和月份都有一個tier_id外鍵,支票有一個client_id外鍵和一個存款日期,一個月有一個tier_id和一個開始日期和結束日期。層級表或多或少是層級名稱(層1,層2)的佔位符,旨在將客戶與他們的月份結合起來。我希望能夠描述@ client.months,它會在表中找到匹配客戶端層的所有月份。此外,我想做一些類似@ month.checks的事情,它會查找特定月份中爲特定客戶發佈的所有支票。但我遇到了各種麻煩。
所以我想知道是否有辦法讓我當前的模式工作,如果我需要做出改變,或者如果我需要從頭開始重新考慮整個事情!而且,更重要的是,如何到達那裏....
編輯:
的什麼,我想從數據庫返回的將採取以下形式在SQL的一個例子:
SELECT ch.*
FROM clients cl
JOIN tiers t ON cl.tier_id = t.id
JOIN months m ON m.tier_id = t.id
JOIN checks ch ON ch.client_id = clients.id
WHERE clients.id = ? AND m.group = ?
,或者更簡單地說:
SELECT ch.*
FROM clients cl
JOIN months m ON m.tier_id = cl.tier_id
JOIN checks ch ON ch.client_id = clients.id
WHERE clients.id = ? AND m.group = ?
belongs_to應該總是單數......'belongs_to:tier' – SteveTurczyn
感謝您的更正! – user1706938
你能解釋一下實際的層次嗎? – depa