2

私はループの基本を学ぼうとしてきましたが、そこにたどり着いていますが、次の要件を回避するのに苦労しています。 /values は配列にハッシュされているようです(? - ここでは初心者なので、私の用語が正しいことを願っています!):-

データは、db テーブルの 1 つの「列」の値が何度も繰り返されるようなものですが、2 番目の「列」の値は一意です。

したがって、同じテキスト行を繰り返し表示する column1 を持つ 2 つの列を持つ単純な出力用のテーブルを HTML で単純に作成するのではなく (次の一意の文字列が何度もリストされる前に)、情報を提示したいと思います。 column1 の一意の文字列値は見出しで、column2 の値はその下にリストされます。

私の考えでは、私が達成しようとしているのは、一意の文字列ごとに column1 をループし、その値を出力し、内部ループを実行して、column1 が「文字列」である column2 のすべての値をリストし、次の値に進むことだと思います。列1の一意の値、その値を出力し、列2を再度ループして、列1が「文字列2」であるすべての値をリストします。

正しい用語で説明する方法を知るのに苦労しているので、それが理にかなっていることを願っています.

ありがとう。

たとえば、データベース テーブルの 2 つの列が次のようになっているとします。


1
Q1 Q1
Q1
Q2
Q2
Q3
Q3
Q3

列 2
A1
A2
A3
A4
A5
A6
A7
A8

次のような出力を表示できるようにするには、どうすればループ (または最適なもの) を実行できますか?

Q1
A1
A2
A3

Q2
A4
A5

Q3
A6
A7
A8

HTML側を記述して出力をフォーマットすることはできますが、ルビー側はわかりません。

単一のループについて、tiny_tds の例から次のルビーをピックアップしました (ここの html は、今のところ配置をテストするためのものです):-

<% narrative.each do |question| %>
<span><%=question.values[1] %></span>
<br/>   
<% end %>

これにより、スロット 2 のすべての値をリストすることができます (これは正しい用語ですか?)。次のようなことができます。

<% narrative.each do |question| %>
<span><%=question.values[0] %></span><span><%=question.values[1] %></span>
<br/>   
<% end %>

両方を並べて表示しますが、私がやりたいことは、次のようになります。

<h1>Question1 goes here</h1>
<ul>
<li>Answer 1</li>
<li>Answer 2</li>
<li>Answer 3</li>
</ul>
<h1>Question2 goes here</h1>
<ul>
<li>Answer 4</li>
<li>Answer 5</li>
</ul>

4

2 に答える 2

0

シンプルに保ちたい場合は、puts の代わりに html タグを追加するだけで、ロジックを与えるだけでこのようにします

a1 = [:Q1,:Q1,:Q1,:Q2,:Q2,:Q3,:Q3,:Q3] 
a2 = [:A1,:A2,:A3,:A4,:A5,:A6,:A7,:A8]

a3 = a1.zip a2
#=>[[:Q1, :A1], [:Q1, :A2], [:Q1, :A3], [:Q2, :A4], [:Q2, :A5], [:Q3, :A6], [:Q3, :A7], [:Q3, :A8]]

a3.each_with_index do |e, i|
  puts "#{e[0] if e[0] != a3[i-1][0]} #{e[1]}"
end

=>
Q1 A1
 A2
 A3
Q2 A4
 A5
Q3 A6
 A7
 A8
于 2013-05-21T09:45:17.207 に答える