0

これはレール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 %> 

あなたのデータと一致し、おそらくkに応じた値をフォーマットするt[k] || '-'を調整する必要があります。また、適切な出力を得るために、特定の方法で@header_valuesを注文することもできます。

+0

調整した元の質問では、レコード長が可変なので、 '_'に一致しません。 – sysconfig

+0

@sysconfig:あなたのコメントは分かりません。 '@ header_values'には可能なすべての列がありますので、それを繰り返します。特定の電車がそのプロパティを持っている場合は' t [k] 'を使用し、' '-''を使用しない場合は使用してください。 –

+0

ありがとうございました。あなたのソリューションは私の最終的なソリューションに影響を与えました。 – sysconfig