我实现了使用rails 3的友谊模型..现在我想让用户添加新朋友......从它的外观来看,我想我需要2个循环...一个用于循环所有用户和另一个用于检查该用户是否已经是朋友....但如果我使用2 for循环,我没有得到我期待的结果和alraedy用户的电子邮件当前用户的朋友打印和地址被多次打印(因为第二个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 %> <%= link_to 'Add as Friend' , friendships_path(:friend_id => user), :method => :post %>
</p>
<br/>
<%end%>
<%end%>
<%end%>
<%end%>
答案 0 :(得分: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 %> <%= link_to 'Add as Friend' , friendships_path(:friend_id => user), :method => :post %>
</p>
<br/>
<% end %>
</p>
答案 1 :(得分:0)
做其他事情怎么样,
User.where('user_id not in (?)', current_user.friends.map(&:id).push(current_user.id))
这会让数据库中的所有用户都不是你current_user的朋友,然后你只需要循环一次。