質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

3562閲覧

【Rails】 viewで n列ごとに表示させたい

hogehogehoge

総合スコア165

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2014/08/25 02:36

1列で表示させるには以下のようにすればよいですが、

lang

1<ul> 2<% for user in @users %> 3 <li><%= user.name %></li> 4<% end %> 5</ul>

例えば以下のように3列で表示させたい場合はどうするのがよいでしょうか?

lang

1<div class="row"> 2 <ul> 3 <li><%=user1.name%></li> 4 <li><%=user2.name%></li> 5 <li><%=user3.name%></li> 6 </ul> 7</div> 8<div class="row"> 9 <ul> 10 <li><%=user4.name%></li> 11 <li><%=user5.name%></li> 12 <li><%=user6.name%></li> 13 </ul> 14</div> 15<div id="row"> 16 <ul> 17 <li><%=user7.name%></li> 18 <li><%=user8.name%></li> 19 <li><%=user9.name%></li> 20 </ul> 21</div>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

解決済みですが、こう書いたほうがスッキリするかと思います。

<% @users.each_slice(3) do |users| %> <div class="row"> <ul> <% users.each do |user| %> <li><%= user.name %></li> <% end %> </ul> </div> <% end %>

ポイントは、each_slice(n)です。
3要素ずつブロックに渡して繰り返し、さらに内部でeachで繰り返してあげれば思ったことが出来るかと思います。

投稿2014/09/12 16:22

shiroemons

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

katoy

2014/09/13 00:23

すばらしい! each_slice なんてメソッドがあるんですね。勉強になりました。
guest

0

ベストアンサー

ul タグの出力を if 文で制御してはどうでしょうか?
以下は erb ではありませんが、ul を 3つ毎に出力する 制御のコンセプトを試したものです。

lang

1users = [1,2,3,4,5,6,7,8] 2# users = [1,2,3] 3# users = [1] 4# users = [] 5 6count = 0 7users.each do |u| 8 if count % 3 == 0 9 if count != 0 10 puts '</ul>' 11 end 12 puts '<ul>' 13 end 14 puts " <li>#{u}</li>" 15 count += 1 16end 17if count > 0 18 puts "</ul>" 19end

これを走らせると、次の出力が得られます。

<ul> <li>1</li> <li>2</li> <li>3</li> </ul> <ul> <li>4</li> <li>5</li> <li>6</li> </ul> <ul> <li>7</li> <li>8</li> </ul>

この制御を view にそのまま書くと保守しにくくなります。
そこで この制御をメソッドとして抽出し、erb では
<% multi_row(@users, 3) %>
のようにだけ記述できるようにするのが好ましいです。

まったく別の実装方針案もあります。
controller で 3 つ毎に user まとめた user_blocks をview に渡して
view では、 <url> </ul> で囲んで、 usre_bloks の内容を 複数の <li>..</li> を出力するというものです。

投稿2014/08/25 21:15

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hogehogehoge

2014/08/28 00:57

親切な回答ありがとうございました!
shiroemons

2014/09/13 07:10

こちらのコードですが、保守性で言うと テンプレートエンジンをHamlやSlimに変更しようとした際で問題がでそうな気がします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問