0

這是一個rails 3.1應用程序,我對Ruby 有一個小菜鳥,我相信有更好的方法來做到這一點。動態表格視圖構造

我有一個MongoDB的具有可變長度的記錄,所以數據可能是這樣的:

 name | type | age | foo | bis | boz 
    ------------------------------------------------ 
a data | - | data | - | data | - 
b  - | data | - | - | data | data 
c  - | - | - | data| - | _ 

其中「 - 」是沒有價值。

數據是這樣的:

[_id: "a", name: "data", age: "data", bis: "data"] 
[_id: "b", type: "data", bis: "data", boz: "data"] 
[_id: "c", foo: "data"] 

我想在我看來 顯示錶中的這個數據我可以得到所有的(可能的)表頭 的陣列是這樣的:

@trains = Train.page(params[:page] || 1).per(50) 
@a = [] 
@header_array = @trains.each {|train| @a.push(train.attributes.keys)} 
@header_values = @a.uniq.to_a 

但我如何循環數據來構建每條記錄的數據行並確保它們排列在表頭的正確列中?也許有更好的方法來生成整個表格。 我也不知道每條記錄的屬性可能是什麼,所以給定結果集時,表格標題將每次動態構建

回答

0

您具有@header_values中的所有標題值,因此您可以使用該標題來驅動顯示器而不是使用每個列車來驅動自己的顯示器;是這樣的:

<% @trains.each do |t| %> 
    <tr> 
     <% @header_values.each do |k| %> 
      <td><%= t[k] || '-' %></td> 
     <% end %> 
    </tr> 
<% end %> 

您可能需要調整t[k] || '-'以配合您的數據和可能的格式依據k值。您也可能想要以某種特定方式訂購@header_values以產生明智的輸出。

+0

調整後的原始問題,我無法匹配'_',因爲記錄長度可變 – sysconfig

+0

@sysconfig:我不理解您的評論。你在'@ header_values'中有所有可能的列,所以你可以迭代它,如果一個特定的列車具有那個屬性,那麼使用't [k]',如果它不使用''''。 –

+0

謝謝,您的解決方案激發了我的最終解決方案。 – sysconfig