渲染@users的条件(排除current_users和有朋友关联的用户)

时间:2013-11-22 21:23:13

标签: ruby-on-rails ruby ruby-on-rails-3 conditional-statements counter-cache

目前,我正在视图中执行条件。我需要在模型或控制器中执行此操作,但尚未找到可行的方法。

我有一个视图通过部分呈现10个用户,按他们的朋友数排序(简化所有示例):

Index.html.erb

<%= render @users %>

_partial.html.erb

<% unless current_user == user or current_user.friending?(user) %>
  <%= user.name %>
<% end %>

模型/ user.rb

scope :top, :order => "friends_count DESC"

users_controller.rb /索引

@users = User.top.limit(10)

但在我的情况下,它会检查每个用户的部分验证。如何在示波器或控制器中更有效地执行此操作并检查所有内容?

非常感谢所有答案。非常感谢。

2 个答案:

答案 0 :(得分:1)

class User
  scope :top, order("friends_count DESC")
  scope :skip_user, lambda{|user| where("id != ?", user.id) }
  scope :skip_user_friends, lambda{|user| where("friend_id != ?", user.id }
end

<强> users_controller.rb

@users = User.top.skip_user(current_user).skip_user_friends(current_user).limit(10)

答案 1 :(得分:0)

当您在控制器中获得@users时,可以使用#select

@users = User.top.reject { |user| current_user == user or current_user.friending?(user) }.limit(10)