目前,我正在视图中执行条件。我需要在模型或控制器中执行此操作,但尚未找到可行的方法。
我有一个视图通过部分呈现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)
但在我的情况下,它会检查每个用户的部分验证。如何在示波器或控制器中更有效地执行此操作并检查所有内容?
非常感谢所有答案。非常感谢。
答案 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)