0

Rails 3を使用して友情モデルを実装しました。ユーザーが新しい友達を追加できるようにしたいのですが...見た目からすると、2つのforループが必要だと思います... 1つはすべてのユーザーをループし、もう1つはそのユーザーがすでに友達であるかどうかを確認しています...しかし、2つのforループを使用すると、期待した結果が得られず、現在のユーザーの友達であるユーザーの電子メールが印刷され、アドレスが取得されます複数回印刷されました(ループ内で印刷しているため、2番目のforループのため)..この問題を回避する他の方法はありますか????

code:
this is my view file:

<center>Bragger's list<center><br/>
<p>
  <% for user in User.all %>
    <% if current_user.email!= user.email %>
      <% for friend in current_user.friends %>
        <% if friend.email!=user.email %>
          <p>
            <%= user.email %> &nbsp; <%= link_to 'Add as Friend' , friendships_path(:friend_id => user), :method => :post %>
          </p>
          <br/> 
        <%end%>
      <%end%>
    <%end%>
  <%end%>
4

2 に答える 2

0

これに対する最善のアプローチは、コントローラー内でまだ current_user のフレンドになっていないユーザーのリストをフィルタリングすることです。あなたはそれを行うことができます

@potential_friends = User.where('id != ? AND id NOT IN (?)', current_user.id, current_user.friend_ids)

次に、ビューでこの変数をループするだけです

<center>Bragger's list<center><br/>
<p>
  <% @potential_friends.each do |user| %>
    <p>
      <%= user.email %> &nbsp; <%= link_to 'Add as Friend' , friendships_path(:friend_id => user), :method => :post %>
    </p>
    <br/> 
  <% end %>
</p>
于 2013-02-28T12:48:05.923 に答える
0

他のことをしたらどうですか、

User.where('user_id not in (?)', current_user.friends.map(&:id).push(current_user.id))

これにより、 current_user の友人ではないすべてのユーザーがデータベースから取得されるため、ループを 1 回だけ行う必要があります。

于 2013-02-28T12:48:09.137 に答える