0

このコードは、現在のディメンション メンバーと次のディメンション メンバーの名前を出力することを期待しています。ここで、next は各ディメンション メンバーの absorder 属性によって定義されます。

<% @dimension_members.each do |dm| %>
    <p><%= dm.name %></p>
    <p><%= DimensionMember.where(:absorder => dm.absorder+1).name %></p>
<% end %>

代わりに、コードは現在のディメンション メンバーの名前を返し、次にすべての次のメンバーの "DimensionMember" を返します。

次のコードは を生成します#<ActiveRecord::Relation:0x3f952e0>:

<% @dimension_members.each do |dm| %>
    <p><%= dm.name %></p>
    <p><%= DimensionMember.where(:absorder => dm.absorder+1) %></p>
<% end %>

配列内の次のメンバーを返すもっと簡単な方法があると想像する必要がありますが、うまく機能させることができません。このアイデアを念頭に置いて次のコードを試しましたが、次のようになります#<DimensionMember:0x3f943f8>

<% @dimension_members.each do |dm| %>
    <p><%= dm.name %></p>
    <p><%= @dimension_members[dm.absorder+1] %></p>
<% end %>

最後に、私はこれを試しました:

<% @dimension_members.each do |dm| %>
    <p><%= dm.name %></p>
    <p><%= @dimension_members[dm.absorder+1].name %></p>
<% end %>

しかし、これはエラーを返します:

undefined method 'name' for nil:NilClass

では、next が特定の属性 absorder によって定義されている次の dimension_member を取得するにはどうすればよいでしょうか?

4

2 に答える 2

1

The reason you're getting strange results is because the where query is returning a relation/collection and not a single object. You just need to get the first object from the query with:

DimensionMember.where(:absorder => dm.absorder+1).first.try(:name)

...

<% @dimension_members.each do |dm| %>
    <p><%= dm.name %></p>
    <p><%= DimensionMember.where(:absorder => dm.absorder+1).first.try(:name) %></p>
<% end %>
于 2013-02-09T22:39:16.083 に答える
0

を使用して、配列の次の要素にアクセスできますnext

<% @dimension_members.each_with_index do |dm, index| %>
    <p><%= dm.name %></p>
    <p><%= @dimension_members[index + 1].name %></p>
<% end %>

これはあなたが探しているものですか、それとも@dimension_membersこの「absorder」プロパティでソートされていませんか? そうでない場合は、反復する前にソートする必要があります。

于 2013-02-09T22:37:12.870 に答える