0

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

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

索引.html.erb

<%= render @users %>

_partial.html.erb

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

模型/用户.rb

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

users_controller.rb/index

@users = User.top.limit(10)

但就我而言,它会检查每个用户的部分验证。如何在范围或控制器中更有效地执行此操作并检查所有内容?

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

4

2 回答 2

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)
于 2013-11-22T21:50:53.300 回答
0

当您进入@users控制器时,您可以使用#select.

@users = User.top.reject { |user| current_user == user or current_user.friending?(user) }.limit(10)
于 2013-11-22T21:27:10.740 回答