0
我有以下代碼,它將導致PodAdmins的一個查詢,然後x查詢,數據庫中的每個Pod都有一個查詢!Rails的ActiveRecord查詢結合方法過濾器 - 如何重寫這個?
pod_admins = PodAdmin.where("pod_id IS NOT null")
pod_admins.select{|pa| pa if pa.pod.is_active?}.each ...
我相信一定有辦法讓數據庫在一個查詢做到這一點,如:
SELECT * FROM
POD_ADMINS
WHERE POD_ID IN
(SELECT ID FROM PODS WHERE <condition>)
<condition>
=這將是豆莢類的is_active?
方法。
我知道我可以寫入SQL並傳遞,但我想訪問/使用'is_active?'方法在這個邏輯上的Pod類 - 因爲如果該方法改變(它可能會),我不想也重構這個。
我確定必須有一些簡單的方法來實現我想要的,只有一個查詢命中數據庫?
爲了完整,這裏是'is_active?'方法:
def is_active?
return true if (self.inactive_date.blank? || self.days_left > 0)
return false
end
這取決於:
def days_left
days = self.inactive_date.strftime("%j").to_i - Date.today.strftime("%j").to_i unless self.inactive_date.nil?
return 0 if days < 0
return days
end
編輯
型號:
class Pod
has_one :pod_admin
has_many :parents
end
class PodAdmin
belongs_to :pod
end
駕駛室你把你的模型?我的意思是協會 – Thorin
你可以使用包括像PodAdmin.includes(:pod).where(「pod_id IS NOT null」) – Thorin
@Thorin我添加了模型 – rmcsharry