2016-12-20 4 views
0

В простой Ruby on Rails applicaiton у меня есть Scaffold под названием «Предложения», на котором один из его столбцов представляет собой строку под названием «creationyear». Я пытаюсь подсчитать, сколько предложений было создано каждый год, когда индекс страницы загружается делать следующее (в файл «proposals_controller.rb»):Ruby on Rails - Count Записи на Scaffold

def index 
    @proposals = Proposal.all 
    @count2015 = Proposal.count(:all, :conditions => "creationyear = 2015") 
    @count2016 = Proposal.count(:all, :conditions => "creationyear = 2016") 
end 

Как-то не работает, так как он дает мне назад по обеим переменным общее количество записей на эшафоте.

Кто-нибудь знает, как решить эту проблему? Я использую Rails v4.2.6.

Спасибо!

ответ

0
@count2015 = Proposal.where(creationyear: '2015').count 

Если creationyear - это строка, в противном случае без кавычек.

+1

Отлично! Благодаря!!! –

0

Почему вы не группируете предложения по годам?

@proposals = Proposal.group(:creationyear).count 

или

@proposals = Proposal.group('creationyear').select('*, COUNT(*) as quantity') 

Это позволит снизить запросы, происходящие на каждый год к одному запросу.

1

Другие ответы здесь в порядке, но это стоит немного фона.

Способ, которым count используется в Active Record, изменился с более ранних версий Rails. Возможно, вы нашли пример из Rails 3 или ранее, где условия могут быть указаны так, как вы пытались.

В более поздних версиях Rails count можно вызвать с именем столбца, например.

Person.count(:email) # number of person records that have an email address 

, но используется в других случаях путем создания объема первой, например, с помощью where, а затем вызвать count на что:

Proposal.where(creationyear: '2015').count 
Смежные вопросы