2016-08-28 37 views
0

基於ActiveRecord中的幾個字段,我需要做一系列的計算,這將導致顯示一個包含大約10列和15行的表格(在視圖中)。最好在哪裏計算並創建一個大型表格以供查看?

我不想在View中做這些計算,所以我想創建一個2D Array來存儲模型中的行,然後在View中訪問這個數組來構建一個表來顯示。 但是看起來我無法在模型的實例變量中存儲數組,所以我正在尋找關於如何最好地處理這種情況的建議?

如果有一種方法可以將數組從模型傳遞到視圖,這將解決我的問題。 試過這樣的事情,但沒有工作,因爲attr_accessor沒有處理數組?

模型XXX

attr_accessor :row_hash 
after_initialize do 
    makeTable 
end 
def makeTable 
    row_hash = Array.new 
    for i in 1..15 do 
     row_hash.push(i) 
    end 
end 

查看

<% @xxx.row_hash.each do |r| %> 
<%= r %> 
<% end %> 

的row_hash填充在型號確定,但我得到的觀點

回答

0

我想你可以把它「沒有方法定義的每個」通過將self添加到row_hash

attr_accessor :row_hash 
after_initialize do 
    makeTable 
end 
def makeTable 
    self.row_hash = Array.new 
    for i in 1..15 do 
     self.row_hash.push(i) 
    end 
end 

初始化row_hash = Array.new將創建一個名爲row_hash的本地變量,因此您需要調用self.row_hash=才能訪問實例屬性編寫器。

但是,這在模型中還是有點奇怪,所以可能有更好的方法來處理這個問題。

+0

奇怪,因爲我認爲我原來是這樣做的,然後刪除代碼,在這篇文章中,我只是犯了一個錯字,但是當我再次添加它時,它確實有效!去圖...謝謝,但如果有更好的方法,那麼我願意提出建議。 –

0

我只想寫:

attr_accessor :rows_array 

after_initialize { generate_row_arrays } 

def generate_row_arrays 
    self.rows_array = (1..15).to_a 
end 

您可能注意到,我從rows_hash更名爲rows_array以避免混淆。 Ans我使用帶下劃線的名字來遵循Ruby約定。

相關問題