Ruby on rails 呈现@users的条件(不包括当前用户和具有好友关联的用户)

Ruby on rails 呈现@users的条件(不包括当前用户和具有好友关联的用户),ruby-on-rails,ruby,ruby-on-rails-3,conditional-statements,counter-cache,Ruby On Rails,Ruby,Ruby On Rails 3,Conditional Statements,Counter Cache,目前,我正在视图中执行条件。我需要在模型或控制器中执行此操作,但尚未找到一种可行的方法 我有一个视图,通过一个分部呈现10个用户,该分部根据他们的好友数对他们进行排序(所有示例都简化): Index.html.erb <%= render @users %> <% unless current_user == user or current_user.friending?(user) %> <%= user.name %> <% end %>

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

我有一个视图,通过一个分部呈现10个用户,该分部根据他们的好友数对他们进行排序(所有示例都简化):

Index.html.erb

<%= render @users %>
<% unless current_user == user or current_user.friending?(user) %>
  <%= user.name %>
<% end %>
scope :top, :order => "friends_count DESC"
@users = User.top.skip_user(current_user).skip_user_friends(current_user).limit(10)
用户\u控制器.rb/index

@users = User.top.limit(10)
但在我的例子中,它检查每个用户的部分验证。我如何在范围或控制器中更有效地执行此操作,并检查所有内容


非常感谢您的回答。非常感谢。

当您在控制器中获得
@用户时,您可以使用
#选择

@users = User.top.reject { |user| current_user == user or current_user.friending?(user) }.limit(10)
用户\u控制器.rb

<%= render @users %>
<% unless current_user == user or current_user.friending?(user) %>
  <%= user.name %>
<% end %>
scope :top, :order => "friends_count DESC"
@users = User.top.skip_user(current_user).skip_user_friends(current_user).limit(10)

我不知道它在你的情况下是否有用,但为什么不使用gem呢?他正在使用
,除非他认为
;因此,拒绝那些符合给定条件的
用户
。我认为,你应该在这里使用
reject
而不是
select
,或者干脆否定条件:User.top.select{User | current|u User!=User | current|u User.friendling?(User)}.limit(10)@bjhaid,是的。但这只会让第三人称=>的整体陈述有点不清楚!ruby_公约:)更新为拒绝。做得好!这还有一个好处。由于整个查询的范围在链中,因此在检索
@users
时,它只会对表执行单个优化的SQL查询。是的,这就是目标。我喜欢将作用域分解为更小的焦点位,因为它们更容易在其他上下文中重用。