我有一個用戶和一個付款模型。用戶有很多付款,付款有一個用戶。爲了搞清楚,如果用戶有一個有效的支付,我用這個:如何儘可能高效地編寫Rails模型關係範圍
User.rb
def payment_active?
payments.where("? >= made_at and ? <= valid_until", DateTime.now, DateTime.now).any?
end
我想定義返回用戶主動支付一個範圍,我想出這個:
User.rb
def self.active_users
User.all.select {|u| u.payment_active?}
end
會是怎樣寫一個這樣的範圍內適當的,更有效的方式?
這不返回uniq用戶列表。使用連接可以在結果數組中複製記錄。改用'.includes(:payments)'。 – MrYoshiji
MyYoshiji有一點。如果您的數據包含進行多次付款的用戶(例如,他們是「雙重活動」),那麼每次符合條件時該用戶將被退回一次。 – GSP