我在寫一個簡單的會員申請。我有兩個型號,Member
和Membership
。根據最近子元素的屬性選擇父項
class Member < ActiveRecord::Base
has_many :memberships
end
class Membership < ActiveRecord::Base
belongs_to :member
end
一個member
持有,如姓名和出生日期信息,一個membership
認爲是在應用了會員資格之日起,它開始的日期,過期等等。一旦會員到期之日起,會員可以續訂,這將創建一個新的成員資格。這意味着每個成員可以擁有多個成員資格,儘管最新的成員資格是他們當前有效的成員資格。
我現在想要檢索例如所有成員已過期的成員。我不能只是這樣做
@members = Member.joins(:memberships).where('memberships.expires < ?', Time.now)
,因爲這將包括任何過去有會員資格的成員。我真正需要做的是能夠加入只有最近的成員的會員資格,並基於該查詢。儘管如此,我對Rails很陌生 - 非常感謝幫助或想法。
編輯:顯然這是一種在普通的舊SQL中不難做到的事情,但我希望能有一些很好的Rails方法來做到這一點(除了粘貼SQL之外)。
我也寧願不添加另一列到任何一個表,只是爲了讓我想做的查詢成爲可能。這很麻煩,我不應該這樣做,並且很可能會導致問題。
檢查這個答案:HTTP://計算器。com/questions/1844037/activerecord-nested-select-can-i-do-it-without-manual-sql –
感謝您的鏈接。正如我所說,在SQL中這樣做不是問題。我希望能夠以類似Rails的方式實現它,但仍然可以獲得將SQL抽象出來的好處。從各種答案開始看起來這是不可能的。 – Russell
抽象很好。這種情況下的問題是ActiveRecord(以及其他類似的抽象層)似乎只支持非常有限的SQL功能子集。 –