2015-01-13 5 views
0

Я пытаюсь показать значения массива, используя каждый месяц в год от контроллера, но ничего не показываю.Невозможно отобразить значения массива многопроцессор от контроллера

Вот информация и демонстрация:

CREATE TABLE player_scores (id INT,name text,date_score date,goals INT); 
CREATE TABLE months (id INT,name text); 

INSERT INTO player_scores VALUE 
(1, 'PIZARRO' , '2015-01-02', 4), 
(2, 'ROBBEN' , '2015-02-24', 2), 
(3, 'RIBERY' , '2015-03-02', 4), 
(4, 'GOTZE'  , '2015-04-24', 2), 
(5, 'NEIWER' , '2015-05-02', 4), 
(6, 'DANTE'  , '2015-06-24', 2), 
(7, 'LEWANDOSKI', '2015-07-02', 4), 
(8, 'RAFINHA' , '2015-07-02', 4), 
(9, 'GUARDIOLA' , '2015-11-02', 3); 

INSERT INTO months VALUE 
(1, 'jan'), 
(2, 'feb'), 
(3, 'mar'), 
    ...  
(12,'dec'); 

Здесь контроллер:

def germany_world_cup 
    @months= Month.all 

    ## THIS LINE WILL REPEAT THE QUERY 12 TIMES FOR EACH MONTH JANUARY TO DECEMBER 
    @months.each do |m| 
     @query = PlayerScore.find_by_sql("SELECT count(*) AS count_all FROM player_scores WHERE YEAR(date_score)=2015 AND MONTH(date_score)='#[m.id}' ") 
    end 
end 

Вот вид с проблемой (не показывает значения):

<% @query.each do |q| %> 
    <%= q.count_all %> ### IS SHOWING only 0 as result 
<% end %> 

Вот мой журнал фактически работает, но не отображается на вид:

select count(*) as count_all from player_scores where month(date_score)=1 and year(date_score)=2015 
select count(*) as count_all from player_scores where month(date_score)=2 and year(date_score)=2015 
... 
select count(*) as count_all from player_scores where month(date_score)=12 and year(date_score)=2015 

Согласно рельсам sintaxis, чтобы показать значение от контроллера

<% @var.each do |v| %> 
    <%= v.column_name %> 
<% end %> 

Я попробовал этот код, чтобы инспектировать значения, но ничего не получил:

<%= @query.inspect %> ### I got " [#] " as result 

Я попробовал этот код:

<% @query[0].each do |q| %> 
    <%= q.count_all %> ### I GOT THIS ERROR "undefined method `each' " 
<% end %> 

Я хочу показать valus из массивов в контроллере

Пожалуйста, кто-нибудь может сказать мне, чтобы показывать значения?

Заранее спасибо.

+0

Вашего цикл будет повторять запрос, в 12 раз, но каждый раз в цикле он просто перезаписывает '@ query' экземпляра переменной –

+0

Так есть ли способ исправить это? –

+0

Вы можете сделать '@queries = []', тогда выполните свой цикл, но присвойте результат переменной query, так что вы помещаете все их в массив, например. '@queries << PlayerScore.find_by_sql (my_query)' в вашем цикле –

ответ

1

Способ избежать @query переменной перезаписи является использование #map:

@query = @months.map do |m| 
    PlayerScore.find_by_sql("SELECT count(*) AS count_all FROM player_scores WHERE YEAR(date_score)=2015 AND MONTH(date_score)='#[m.id}' ") 
end 
+0

Спасибо, но работал тоже с помощью @ query = [] –

+0

@EzioAuditore да, но это не совсем рубиновый подход;) –

+0

Спасибо, что это был хороший совет, он работал для меня +1 за вашу помощь. –

Смежные вопросы