2011-07-28 34 views
1

這裏是絕對RoR新手,我試圖在一個循環中渲染多個聯賽,每次增加div_#,這裏是一個減少版本,沒有html。它工作時,我硬編碼div_1或div_2進行排序,但div_name不起作用,即使它有正確的內容我需要它被視爲數組。將數組名稱分配給一個變量並在RoR中排序

<% div_1 = Array.new 
    div_1 << { :Name => 'Rob', :Played => '2', :Won => '1', :Lost => 1, :Points => 4} 

    div_2 = Array.new 
    div_2 << { :Name => 'Gavin', :Played => '2', :Won => '1', :Lost => 1, :Points => 4} 

    for i in (1..2) 

    i = i.to_s 
    div_name = "div_" + i 

    div_name.sort_by { |position| position[:Points] }.reverse!.each do |position| %> 

<%= position[:Name] %> 

回答

2

有很多問題這裏:現在

div_1 = Array.new 
div_1 << { :Name => 'Rob', :Played => '2', :Won => '1', :Lost => 1, :Points => 4} 

div_1是具有單個元件,這是一個散列數組。如果你只有一個元素,你不需要數組。

for i in (1..2) 

這個循環的塊在哪裏?該聲明後,i仍然是不確定的,所以當你打電話

i = i.to_s 

,你會得到一個NameError。

div_name = "div_" + i 

即使i == 1div_name將與價值「div_1」的字符串,而不是div_1變量你在上面定義的副本或實例。

div_name.sort_by { |position| position[:Points] }.reverse!.each do |position| %> 

現在你試圖調用sort_by上的繩子,不給迴應,因爲它沒有任何意義。

<%= position[:Name] %> 

您沒有在此範圍內定義的名稱爲position的變量。

此外,當您發現自己在一個視圖內放置了大量邏輯時,該視圖在<% %>標籤內,這意味着您需要將該代碼移到其他地方,如控制器。你可以定義和計算@positions作爲哈希控制器的陣列,然後在視圖中做這樣的事情:

<% @positions.each do |position| %> 
    <%= position[:name] %> 
<% end %> 
+0

非常感謝指導下,好像我需要它。 我肯定會有更多的元素,我只是把它作爲一個例子,這些塊應該在我所提供的底部結束。 當我得到它的工作時,我會將東西移動到控制器中,只是想一次只做一步,讓我的頭部繞過這些東西。 奇怪的是i = i.to_s部分工作,我沒有得到任何錯誤,我可以打印沒有問題的值。 我的最終目標是讓所有的聯賽都通過一個循環進行迭代並創建單獨的排序表。 – snick

相關問題