Область применения Rails с подсчетом отношений HABTM - PullRequest
0 голосов
/ 12 ноября 2011

У меня есть класс Event с отношением HABTM с классом User. Я пытаюсь создать область событий, включающую только те события, с которыми связано 2 пользователя.

В настоящее время у меня есть метод статуса Event #, который возвращает следующее:

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

1 Ответ

0 голосов
/ 12 ноября 2011

У вас есть несколько проблем здесь. Прямо сейчас, ваш метод status возвращает буквенные строки, что немного удивительно - было бы более распространенным, чтобы это возвращало логическое значение. Кроме того, имя status не является описательным - возможно, exactly_two_users? будет лучше. Кроме того, если вы используете users.count вместо users.length, то БД сделает подсчет более эффективно.

Ваша сфера может быть просто where(:users.count => 2), я полагаю.

...