2016-06-11 10 views
1

私は製品のいくつかのデータを比較できるように、ジキルのためのプラグインを書く と私は私のテンプレートで利用できるようにするので、のようなハッシュの配列を返すアム:トラバース配列(ジキル)

data = [{"current"=>"0.4mA", "power"=>"15w"}, {"current"=>"1A", "power"=>"5w"}] 

しかし、私はliquidを使用してそれらを通過する際に、今、:

<table> 
{% for h in data %} 
    <tr> 
    {% for p in h %} 
     <td>{{ p[0] }}</td> 
     <td>{{ p[1] }}</td> 
    {% endfor %} 
    </tr> 
{% endfor %} 
</table> 

私は一度にハッシュ 1を通過していますように私は、側によって性質側を一覧表示することができませんので、私はそれらを1つを有する終わります代わりに他の下に。

プラグインを使用してデータを準備するにはどうすればいいですか? 私のテンプレートで何ができるのですか?

EDIT:

だから、ビットをクリアするには、純粋なルビーを使用してハッシュの上記配列 から次のような構造を得るためにどのように?:

p1['current'] = '0.4mA' 
p1['power'] = '15w' 
... *may have more of these, depending on number of key:value pairs in the hash 
p1['...'] = '...' 

p2['current'] = '1A' 
p2['power'] = '5w' 
... *may have more of these, depending on number of key:value pairs in the hash 
p2['...'] = '...' 

答えて

2

を置きます表示テンプレートを変更するとRubyでデータハッシュを次のように変換することができます:

dataのすべてのハッシュにすべてのキーが含まれることがわかっている場合は、

keys = data[0].keys 

または、ハッシュがdであればデータは意味がありません場合は、ATAここではデータ配列をバイパスして、ちょうど1行でH1とH2から直接値を取得する方法ですあなたがdata

keys = data.map(&:keys).flatten.uniq 

new_data_array = keys.map { |a| data.map { |d| d[a] } } 
=> [["0.4mA", "1A"], ["15w", "5w"]] 

new_data_hash = Hash[keys.map {|a| [a, data.map { |d| d[a] }] }] 
=> {"current"=>["0.4mA", "1A"], "power"=>["15w", "5w"]} 

内のすべての個別のキーを取得することができ、キーを省略することがあります

Hash[(h1.keys & h2.keys).map {|a| [a, [h1, h2].map { |d| d[a] }] }] 
=> {"current"=>["0.4mA", "1A"], "power"=>["15w", "5w"]} 

(h1.keys & h2.keys).map {|a| [h1, h2].map { |d| d[a] } } 
=> [["0.4mA", "1A"], ["15w", "5w"]] 
+0

しかし、私はキーの任意の名前とそれらの変数番号を持っているので、それらとどのようにマップするのですか? – branquito

+0

ハードコードされた値の代わりに 'data [0] .keys.to_a'を使って解決しました。共通キーで他の2つのプロダクトハッシュが交差しているので、両方のハッシュで常に同じであるためです。 – branquito

+1

あなたの将来のデータセットにいくつかの値のキーがない場合は、私の答えを同じ方法で更新しました –

1

私はのための構文に慣れていませんよ液体ですが、私は{% <ruby code> %}とし、{{ <ruby code> }}は.erbの<% <ruby code> %>と、<%= <ruby code> %>と類似しています。その場合、次の操作を実行できます:

['current'、 'power']。each do | a | data.each do | d |あなたは(「現在」「パワー」の1行などのために例えば、1行)の行に表示されたプロパティをしたい、あなたがいずれかをしたくない場合はD [A]エンド・エンド

<table> 
{% ['current', 'power'].each do |a| %} 
    <tr> 
    {% data.each do |d| %} 
     <td>{{ a[d] }}</td> 
    {% end %} 
    </tr> 
{% end %} 
</table> 
+0

残念ながら液体はそれを行うことができません。私の質問は、純粋なルビーを使用して、代わりにプラグインでデータを再構成する方法に関するもので、テンプレートエンジンに渡します。私は必要な方法でデータをトラバースすることができます。 – branquito