0

我使用 Rails 3 实现了一个友谊模型。现在我想让用户添加新朋友...从外观上看,我想我需要 2 个 for 循环...一个用于循环所有用户,另一个用于循环检查该用户是否已经是朋友....但是如果我使用 2 for 循环,我不会得到我期望的结果,并且已经是当前用户的朋友的用户的电子邮件打印并且地址得到多次打印(因为第二个 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))

This would get all the users from the database that are not your current_user's friends and then you have only to loop once.

于 2013-02-28T12:48:09.137 回答