Простой вопрос IRB относительно количества - PullRequest
0 голосов
/ 13 мая 2010

У меня есть класс, который называется Deal.

Сделка имеет рейтинг голосов.

Хотелось бы посмотреть, сколько в поле Deal результатов голосования больше 2.

Мое предположение:

для voice_scores> 2 в сделке подсчитывать конец

На самом деле не работает: D

Edit:

Я испробовал все идеи. Но обратите внимание, что:

Deal.vote_scores

Не работает, так как voice_scores - это не атрибут сделки, а скорее атрибут одного из сделок. Так что, если я сделал это:

Deal.find (1) .vote_scores

вернул бы #.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * Здесь в экземпляре хамла создается

voice_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

Ответы [ 3 ]

2 голосов
/ 13 мая 2010

Если вы просто хотите узнать, сколько их будет, более эффективный код будет:

Deal.count(:conditions => ["vote_scores > ?", 2])

Это будет быстрее, поскольку подсчет выполняется в sql, а не в ruby.

EDIT

Хорошо, мы можем попробовать это:

Deal.find(:all).select {|e| e.vote_scores > 2}.count

Это вернет общее количество объекта сделки, у которого есть voice_scores> 2

Надеюсь, это то, что вы хотите сделать.

0 голосов
/ 13 мая 2010
deal = Deal.first #or whatever... Deal.find(10)
deal.votes.count :conditions => ['value > ?', 2]

для всех голосов

Vote.count(:conditions => ['value > ?', 2'])
0 голосов
/ 13 мая 2010

Deal.find (: все,: условия => ["voice_scores>?", 2]). Длина

...