0

我有一個與用戶類HABTM關係的事件類。我正在嘗試創建一個Event範圍,其中只包含與其關聯的2個用戶的事件。Rails的範圍與HABTM關係計數

我現在有一個返回之後的賽事#狀態的方法:

def status 
    self.users.length == 2 ? "matched" : "not matched" 
end 

所以現在基本上我試圖找出如何寫一個範圍,包括所有「匹配」的事件。我試過scope :matched, self.users.length == 2,這根本不起作用,但有沒有類似的方式,我錯過了?

編輯:這種類方法正確地做到了這一點,但如果我可以將它封裝在一個範圍內,它仍然會很好。

def self.pending 
    Event.all.map { |e| e if e.status == "matched" } 
end 

回答

0

這裏有幾個問題。現在,您的status方法正在返回文字字符串,這有點令人驚訝 - 這將返回一個布爾值更常見。此外,名稱status不具描述性 - 可能exactly_two_users?會更好。另外,如果您使用users.count而不是users.length,那麼數據庫將更有效地進行計數。

我相信你的範圍可以簡單地爲where(:users.count => 2)

+0

我實際上簡化了一下這個方法,它應該返回三種不同的狀態。 'where(:users.count => 2)'不起作用,不幸的是 - 它表示沒有符號的計數方法。 –

+0

也許''users.count''會起作用;我只是快速搜索語法,但沒有成功。無論如何,這是基本的想法。 –