Простой вопрос IRB относительно количества
-
26-09-2019 - |
Вопрос
У меня есть класс под названием сделку.
Сделка имеет голосование_scores.
Я хотел бы видеть, сколько голосовать_scores в сделке, которые превышают 2.
Мое предположение :
Для голосования_scores> 2 в конце сделки
На самом деле не работает: D
Редактировать:
Я попробовал все идеи. Но обратите внимание, что:
Deam.vote_scores.
Не работает, потому что голосование_scores не является атрибутом сделки, а атрибут одного из его сделок. Так что, если я сделал это:
Deam.find (1) .vote_scores
вернется #.
Голосование_scores создается в Хамле здесь:
.deal_summary{:id => "deal_#{deal_view.id}"}
.score
= deal_view.vote_scores
В модели здесь:
def vote_scores
self.votes.inject(0){|sum, vote| sum + vote.value}
end
Решение
Если вы просто хотите знать, сколько будет более эффективным кодом:
Deal.count(:conditions => ["vote_scores > ?", 2])
Это будет быстрее, так как подсчет выполняется в SQL, а не в Ruby.
РЕДАКТИРОВАТЬ
Хорошо, мы можем попробовать это:
Deal.find(:all).select {|e| e.vote_scores > 2}.count
Это вернет общее количество объектов DEAL, которое имеет голосование_scores> 2
Надеюсь, что вы хотите сделать.
Другие советы
Deam.find (: все: Условия => ["" Голосование_scores>? ", 2]). Длина
deal = Deal.first #or whatever... Deal.find(10)
deal.votes.count :conditions => ['value > ?', 2]
Для всех голосов
Vote.count(:conditions => ['value > ?', 2'])