0

User オブジェクトの配列があります: @users = User.all. 今、私はこのようなもので2列のテーブルを作成したいと思います. しかし、次のコードは機能しません。first_name未定義のメソッドだと言っています。(反復をスキップする方法もわかりません):

<table class="member_table">
  <% for i in 0..@users.length %>
    <tr>
      <td><%= @users[i].first_name %></td>
      <td><%= @users[i+1].first_name %></td>
    </tr>
    <% skip one iteration %>
  <% end %>
</table>
4

3 に答える 3

2

私は使用する傾向がありますEnumerable#each_slice

このeach_sliceメソッドは、配列を「スライス」の配列に変換します。そのサイズは、次のように最初のパラメーターとして指定します。

(0...10).each_slice(2).to_a
=> [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]

あなたの例を使用すると、次のようになります。

<table class="member_table">
  <% @users.each_slice(2) do |first_user, second_user| %>
    <tr>
      <td><%= first_user.first_name %></td>
      <td><%= second_user.first_name unless second_user.nil? %></td>
    </tr>
  <% end %>
</table>
于 2013-03-28T03:52:46.970 に答える
0

次回は、エラーメッセージの全文を投稿してください。

配列の境界を超えて、逆参照しようとしていnilます。nilメソッドはありませんfirst_name

アレイに U0 と U1 の 2 人のユーザーがいるとします。配列の長さは 2 になりました。

あなたは今、この配列をループしています:

  • i = 0 で、U0 と U1 を出力します。
  • i = 1 で、U1 を出力して U2 を出力しようとしますが、これは存在しません。
于 2013-03-28T03:46:09.310 に答える
0

私は間違いなく theTRON のソリューションを使用します。ただし、あなたの場合、どこにアクセスしようとすると例外がトリガーされ@users[N]ますN >= @users.length

例えば ​​:

test = [1,2,3]
test[1]     # => 2
test.length # => 3
test[3]     # => not defined 
于 2013-03-28T10:01:35.837 に答える